【问题标题】:Android: empty ListView after Button Back pressedAndroid:按下按钮返回后为空 ListView
【发布时间】: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


【解决方案1】:

有一个方法叫

@Override
protected void setUserVisibleHint(boolean isUserVisible){
}

只需覆盖该方法并检查该片段是否对用户可见并执行诸如 notifyDatasetChanged() 之类的必要操作。

nulll 检查很重要。

谢谢

【讨论】:

  • 覆盖 setUserVisibleHint 并没有改变什么。 ListView 有时仍然是空的。
  • 片段内的片段?
  • 不,我有一个片段的活动,点击一个项目我会更改片段。片段在堆栈中,所以我可以向后导航。
  • 确保每次调用你的 oncreateView() 和 onViewCreated 你能分享完整的代码吗
猜你喜欢
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多