【发布时间】:2016-10-20 09:29:57
【问题描述】:
我有一个活动,它显示不同的片段。片段的布局通常是一个listView。当您单击 listView 中的项目时,将显示下一个片段。片段有一个 SwipeRefreshLayout。
问题是当按下按钮返回时,listView 有时是空的。 在调试中我可以看到数据仍然在哪里,但是 listView 并不总是重新绘制它。在 listView 为空的情况下,listView 的刷新也不起作用。数据重新加载,但不可见。
我有一个适配器,我调用了 notifyDataSetChanged。我也尝试过重置列表,然后调用 adapter.notifyDataSetChanged,但它不起作用。
片段的onCreate():
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// creates the adapter for the different fragments
adapter = createListViewAdapter();
setListAdapter(adapter);
}
片段的onViewCreated():
public void onViewCreated(View view, Bundle savedInstanceState){
// reload data when it is not present
this.values = values;
this.filteredValues = values;
adapter.notifyDataSetChanged();
this.setOnRefreshListener(() -> {
// reload data
this.values = values;
this.filteredValues = values;
adapter.notifyDataSetChanged();
)};
super.onViewCreate(view, savedInstanceState);
}
适配器:
public abstract class BaseListViewAdapter extends BaseAdapter implements Filterable{
@Override
public int getCount(){
return filteredValues.size();
}
@Override
public T getItme(int position){
return filteredValues.get(positon);
}
@Override
public long getItemI(int position){
return 0;
}
@Override
public Filter getFilter(){
return BaseListViewFragment.this.getFilter();
}
}
getView()、getViewTypeCount() 和 getItemViewType 在不同的片段中实现。
问题出现不规律,有什么问题吗?
【问题讨论】:
-
移除 SwipeRefreshLayout 解决了这个问题。
标签: android listview baseadapter