Android Chris Banes PullToRefreshListView出现自定义适配器错误

Android Chris Banes PullToRefreshListView出现自定义适配器错误,android,android-listview,android-adapter,custom-adapter,pull-to-refresh,Android,Android Listview,Android Adapter,Custom Adapter,Pull To Refresh,我正在设置一个自定义列表视图 pull to refresh功能直接来自 ListView显示图像,因此我创建了一个自定义适配器: class mAdapter extends BaseAdapter{ public mAdapter(Context context){ // nothing to do } @Override public int getCount() { return mValues.size();

我正在设置一个自定义列表视图

pull to refresh功能直接来自

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;
    }
}
在onCreate()中,我获取listView并分配适配器:

mListView = (PullToRefreshListView) findViewById(R.id.listView);
mListView.setAdapter(new mAdapter(context));
之后,我向mValues(用于从web加载图像的url)添加一个图像,并在适配器上调用notifiyDataSetChanged

在mListView.onRefresh()中,我向mValues添加了一个图像

这对于添加第一个图像,甚至是第一组图像(在调用mAdapter.notifyDataSetChanged()之前)都很顺利。 刷新指示器按预期显示和隐藏

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

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

但是:刷新指示器从此不再隐藏。调用了“onRefreshComplete()”,但第二次似乎无法正常工作

UI线程没有阻塞,因此操作仍然是可能的。 如果我删除了mValues中的所有项目,通知适配器并再次拉刷新,则图像被正确添加,刷新指示器被正确隐藏

结论:只有当列表在刷新之前为空时,才能正确隐藏对刷新的拉动

我真的不知道在哪里可以找到解决这个奇怪错误的方法

也许熟悉奇尔斯·贝恩斯(Chirs Banes)图书馆更新功能的人可以帮我


谢谢大家!

我自己刚想出来--

对于任何感兴趣的人:

您必须从UI线程设置onRefreshComplete。 使用处理程序。从onRefresh()内部发布它 我找到了两种方法:

  • 动态地,当需要pulltorefreshview在拉入时停止do任务时,可以设置自定义异步任务,例如:

    private class GetDataTask extends AsyncTask<Void, Void, String[]> {
            @Override
            protected String[] doInBackground(Void... params) {
                    return null;
            }
    
            @Override
            protected void onPostExecute(String[] result) {
                    lv.onRefreshComplete();
                    showToast(getResources().getString(R.string.no_more));
    
                    super.onPostExecute(result);
            }
    }
    

  • 请详细说明。代码片段将是最好的帮助Hey@Cabus-你能帮我处理代码片段吗。我遇到了同样的问题,但onRefreshComplete()没有帮助。我有我的问题-谢谢!如果有人正在查找代码段,请考虑这一个:new汉德勒(Looper-GETMILLO()).POST(new Runnable)({ @重写公共无效运行)({PultRoLoeListListVIEW,OnPrrutHealthEnter);};
    ptrlv.setMode(Mode.Both); // both direction can be used
    ptrlv.setMpde(Mode.PULL_FROM_START); // only pull down can be used.