Chris Banes PullToRefreshListView与自定义适配器错误

Cab*_*bus 4 android android-listview android-adapter custom-adapter pull-to-refresh

我正在设置自定义ListView.

pull-to-refresh功能直接来自https://github.com/chrisbanes/Android-PullToRefresh

ListView显示图像,所以我创建了一个自定义适配器:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在onCreate()中,我得到listView并分配适配器:

mListView = (PullToRefreshListView) findViewById(R.id.listView);
mListView.setAdapter(new mAdapter(context));
Run Code Online (Sandbox Code Playgroud)

之后,我将图像添加到mValues(图像的URL以从Web加载)并在适配器上调用notifiyDataSetChanged.

在mListView.onRefresh()中,我将图像添加到mValues.

这适用于添加第一个图像,甚至是第一批图像(在调用mAdapter.notifyDataSetChanged()之前).刷新指示器按预期显示和隐藏.

当我尝试在那之后添加另一个图像(或束)时,奇怪的事情开始发生.

刷新指示器显示,图像显示在列表视图中.

但是:之后刷新指示器永远不会再隐藏."onRefreshComplete()"被调用,但第二次似乎无法正常工作.

UI线程没有阻塞,因此仍然可以进行操作.如果我删除mValues中的所有项目,请通知适配器并再次刷新,正确添加图像,并正确隐藏刷新指示器.

结论:如果列表在刷新之前为空,则pull-to-refresh仅适当隐藏.

我真的不知道在哪里寻找这个奇怪的错误的解决方案.

也许熟悉Chirs Banes的Pull-To-Refresh图书馆的人可以帮助我.

谢谢 !

Cab*_*bus 8

我只是想出了自己 - .-

对于有兴趣的人:

您必须从UI线程设置onRefreshComplete.使用处理程序从onRefresh()内部.post.< - 顺便说一句,它运行在一个单独的线程上.

祝你今天愉快.