有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java何时/如何添加ListView适配器,使用back按钮恢复它?(片段)

何时/如何添加ListView适配器,是否使用“后退”按钮恢复? 我想从FragmentB移回Fragment A,并拥有与转到FragmentB之前相同的适配器

@Override
public void onViewCreated(@NonNull View view, @Nullable final Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    adapter = new UserAdapter(getContext(), R.layout.list_item, userList);
}

有了这个,我总是在创造一个新的。我只想创建一次,然后保存它


共 (2) 个答案

  1. # 1 楼答案

    实际的解决方案取决于您的片段事务,以及您的片段是否在事务中被销毁的事实

    如果它在从第二个片段返回后仍然存在,那么您可以简单地使用另一个生命周期回调(onCreated)。这样,适配器将只创建一次:

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new MyAdapter( ... );
    }
    

    如果您的片段无法存活(如果它被替换和销毁),那么您必须保存适配器的状态,创建一个新的适配器,并对其应用旧的(保存的)状态

  2. # 2 楼答案

    我找到了一个解决方案。对于任何有同样问题的人:

    像这样在你的片段中创建一个布尔值,并检查你的片段是哪个版本。这样,您只能在开始时创建适配器,而不能在每次返回时覆盖它

    public class MyFragment extends Fragment {
        private boolean isCreated;
        private MyAdapter adapter;
    
        public MyFragment() {
        // Required empty public constructor
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable final Bundle savedInstanceState) {
           super.onViewCreated(view, savedInstanceState);
           if(!isCreated){
              adapter = new MyAdapter(getContext(), R.layout.list_item, myList);
           }
           // create your listView here, set adapter and set onItemClickListener..
        }
    
        @Override
        public void onResume() {
           super.onResume();
           if(!isCreated)
           {
              isCreated = true;
           }
    }