Android:按下按钮后清空ListView

Android:按下按钮后清空ListView,android,listview,baseadapter,Android,Listview,Baseadapter,我有一个活动,它显示了不同的片段。片段的布局通常是listView。当您在listView中单击一个项目时,将显示下一个片段。这些碎片有一个完整的布局 问题是,当按下“后退”按钮时,listView有时是空的。 在debug中,我可以看到数据仍然在哪里,但是listView并不总是重新绘制它。在listView为空的情况下,listView的刷新也不起作用。数据将重新加载,但不可见 我有一个适配器,我调用notifyDataSetChanged。我还尝试重置列表,然后调用adapter.noti

我有一个活动,它显示了不同的片段。片段的布局通常是listView。当您在listView中单击一个项目时,将显示下一个片段。这些碎片有一个完整的布局

问题是,当按下“后退”按钮时,listView有时是空的。 在debug中,我可以看到数据仍然在哪里,但是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);
   }
    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);
     }
片段的onViewCreated():

   public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     // creates the adapter for the different fragments
     adapter = createListViewAdapter();
     setListAdapter(adapter);
   }
    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
在不同的片段中实现


问题发生的不规则,你知道问题是什么吗?

有一种方法叫做

@Override
protected void setUserVisibleHint(boolean isUserVisible){
}
只需重写该方法并检查片段是否对用户可见,并执行必要的操作,如notifyDatasetChanged()

空值检查很重要


谢谢

有一个方法叫做

@Override
protected void setUserVisibleHint(boolean isUserVisible){
}
只需重写该方法并检查片段是否对用户可见,并执行必要的操作,如notifyDatasetChanged()

空值检查很重要


谢谢

覆盖setUserVisibleHint并没有改变什么。ListView有时仍然是空的。片段中有一个片段吗?不,我有一个带有一个片段的活动,单击一个项目我就更改了片段。片段在堆栈中,因此我可以导航回去。确保每次调用oncreateView()和onViewCreated时,您都可以共享完整的代码覆盖setUserVisibleHint没有更改某些内容。ListView有时仍然是空的。片段中有一个片段吗?不,我有一个带有一个片段的活动,单击一个项目我就更改了片段。片段在堆栈中,因此我可以导航回去。确保每次调用oncreateView()和onViewCreated时,您都可以共享完整代码删除SwiperFreshLayout修复了问题。删除SwiperFreshLayout修复了问题。