android - 带有自定义适配器错误的 Chris Banes PullToRefreshListView

标签 android android-listview android-adapter custom-adapter pull-to-refresh

我正在设置自定义 ListView。

下拉刷新功能直接来自 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;
    }
}

在 onCreate() 中,我获取 listView 并分配适配器:

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

之后我将图像添加到 mValues(从网络加载图像的 url)并在适配器上调用 notifiyDataSetChanged。

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

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

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

刷新指示器显示,图像显示在 ListView 中。

但是:在那之后刷新指示器再也不会隐藏了。 “onRefreshComplete()”被调用,但第二次似乎无法正常工作。

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

结论:只有在刷新前列表为空时,下拉刷新才会正确隐藏。

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

也许熟悉 Chirs Banes 的 Pull-To-Refresh 库的人可以帮助我。

谢谢!

最佳答案

我只是自己想出来的-.-

对于任何感兴趣的人:

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

祝你有美好的一天。

关于android - 带有自定义适配器错误的 Chris Banes PullToRefreshListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17516288/

相关文章:

php - 为移动应用程序构建的 REST API

android - 使用运行总计填充 CursorAdapter 的 ListView

android - 如何注册长按AutoCompleteTextView下拉菜单中显示的列表项?

android - Spinner 和 RecyclerView 的通用适配器

android - ListView 游标适配器,总是在点击时获得第一项

android - 我自己的应用程序之间的安全通信

android - 一次播放两个媒体播放器

android - 从一组 4 种颜色中设置列表项中的颜色

java - 当我点击 Android 应用程序中的搜索按钮时,如何更新我的 View ?

android - 如何禁用 PreferenceActivity 中的 Preference Header