我正在设置自定义 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(要从 Web 加载的图像的 URL)并在适配器上调用 notifyDataSetChanged。
在 mListView.onRefresh() 中,我将图像添加到 mValues。
这适用于添加第一张图像,甚至是第一组图像(在调用 mAdapter.notifyDataSetChanged() 之前)。刷新指示器按预期显示和隐藏。
当我尝试在此之后添加另一个图像(或一堆)时,奇怪的事情开始发生。
刷新指示器显示,图像显示在列表视图中。
但是:刷新指示器之后再也不会隐藏了。“onRefreshComplete()”被调用,但第二次似乎无法正常工作。
UI 线程没有阻塞,所以仍然可以操作。如果我删除mValues中的所有项目,通知适配器并再次拉动刷新,图像被正确添加,刷新指示器被正确隐藏。
结论:只有在刷新前列表为空时,下拉刷新才会正确隐藏。
我真的不知道在哪里寻找这个奇怪错误的解决方案。
也许熟悉 Chirs Banes 的 Pull-To-Refresh Library 的人可以在这里帮助我。
谢谢你 !