我有一个活动,显示不同的片段。片段的布局通常是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
在不同的片段中实施。
问题不定期发生,任何想法是什么问题?
答案 0 :(得分:0)
有一种名为
的方法@Override
protected void setUserVisibleHint(boolean isUserVisible){
}
只需覆盖该方法,然后检查片段是否对用户可见,并像notifyDatasetChanged()一样进行必要的操作。
nulll check非常重要。
由于