Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chris Banes PullToRefreshListView with Custom Adapter Error

I'm Settings up a Custom ListView.

The pull-to-refresh feature comes straight from https://github.com/chrisbanes/Android-PullToRefresh

The ListView displayes Images, so i created a custom Adapter:

class mAdapter extends BaseAdapter{

    public mAdapter(Context context){
        // nothing to do
    }

    @Override
    public int getCount() {
        return mValues.size();
    }

    @Override
    public Object getItem(int position) {
        return mValues.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean areAllItemsEnabled() 
    { 
            return false; 
    }

    @Override
    public boolean isEnabled(int position) 
    { 
            return false; 
    } 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if(v == null){
            LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.list_item, null);
        }
        ImageView iv = (ImageView) v.findViewById(R.id.imageView);
        if(iv != null){
            displayImageInView(iv);
            iv.setClickable(true);
            iv.setOnClickListener(new View.OnClickListener() {          
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "ImageView", Toast.LENGTH_SHORT).show();
                }
            });
        }
        return v;
    }
}

in onCreate(), i get the listView and assign the adapter:

mListView = (PullToRefreshListView) findViewById(R.id.listView);
mListView.setAdapter(new mAdapter(context));

After that i add an image to mValues (url for image to load from web) and call notifiyDataSetChanged on the adapter.

in mListView.onRefresh(), i add an image to mValues.

This works smoothly for adding the first image, or even the first bunch of images (before calling mAdapter.notifyDataSetChanged()). The refresh indicator shows and hides as intended.

The weird things start happening when i try to add another image (or bunch) after that.

The refresh indicator shows, the image is displayed in the list view.

BUT : the refresh indicator never hides again after that. "onRefreshComplete()" gets called, but seems not to work properly the second time.

The UI Thread is not blocking, so operation is still possible. If i delete all items in mValues, notify the adapter and pull to refresh again, the image is added properly, and the refresh indicator is hidden properly.

Conclusion: The pull-to-refresh only hides properly if the list was empty before refreshing.

I really don't know where to look for a solution for this weird error.

Maybe someone familiar with the Pull-To-Refresh Library from Chirs Banes can help me out here.

Thank You !

like image 802
CodingMeSwiftly Avatar asked Jan 13 '23 23:01

CodingMeSwiftly


1 Answers

I just figured it out myself -.-

For anyone interested:

You have to set onRefreshComplete from the UI Thread. Use a Handler to .post it from inside onRefresh(). <- which by the way runs on a separate thread.

Have a nice day.

like image 66
CodingMeSwiftly Avatar answered Jan 16 '23 01:01

CodingMeSwiftly