Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adapter class cast exception when removing a Footer view?

Tags:

android

I have an exception I never thought I would see. A class cast exception of the adapter when removing a footer view from a ListView (sic).

 java.lang.ClassCastException: com.test.MyAdapter
 at android.widget.ListView.removeFooterView(ListView.java:381)

How can this happen? What does removing a footer have to do with class cast exception????

The list is a multi-list adapter perhaps that is why but still a class cast exception for removing a footer (sic).

like image 331
Code Droid Avatar asked Sep 29 '12 02:09

Code Droid


2 Answers

Add your footer view to ListView before calling setAdapter() method.

Added:

public void addFooterView (View v)

Since: API Level 1 Add a fixed view to appear at the bottom of the list. If addFooterView is called more than once, the views will appear in the order they were added. Views added using this call can take focus if they want.

NOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.

Parameters v The view to add.

Source

Also you can check this interesting post.

Hope this helps.

like image 128
Vishal Vyas Avatar answered Sep 24 '22 06:09

Vishal Vyas


This is some code for the answer above, it worked in my case:

I had to set a footerView (it's a loadingView in a listView with pagination) to my listView before setting it's adapter and then remove it. First I initialized my loadingView from a layout file in OnCreate method:

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
loadingView = layoutInflater.inflate(R.layout.loading_view, null);

Then I used this workaround in the same method:

this.setIsLoading(true);
listView.setAdapter(adapter);
this.setIsLoading(false);

Where

private void setIsLoading(boolean isLoading)
{
    this.isLoading = isLoading;

    if (isLoading) {
        listView.addFooterView(loadingView);
    }
    else {
        listView.removeFooterView(loadingView);
    }
}
like image 30
Denis Kutlubaev Avatar answered Sep 22 '22 06:09

Denis Kutlubaev