单击每次底部划分选项卡时,请防止片段重新创建



我正在使用Android中的bottomNavigationView来制作像Instagram一样的应用程序。我正在使用navigationTabs片段。应用程序有5个选项卡初始化,我将中间选项卡设置为活动选项卡,并在应用程序启动后加载它。当我单击任何其他选项卡时,进行了网络调用并加载数据。现在,当我按下后面按钮或再次单击最后一个选项卡(在启动时加载(时,重新创建了片段,并进行网络调用以加载相同的数据。我想在不重新创建的情况下显示以前的片段。

我尝试使用

transaction.add(container,fragment);

,但无济于事。

我的代码在选项卡上单击

 if (item.getItemId() == R.id.nav_OverView && _current != R.id.nav_OverView) {
      Overview _overView = new Overview(); 
     _fragmentTransaction.hide(_currentFragment);
     _fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
     _fragmentTransaction.add(R.id.content_base_drawer, _overView);
     _fragmentTransaction.commit();
     _current = R.id.nav_OverView;
      viewIsAtHome = true;
     }

我知道使用删除和添加与使用替换相同。

任何帮助都将不胜感激。

在创建视图之前,您可以检查视图是否已经创建,以下代码有助于片段重现问题。

View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
if (view == null) 
  {
        view = inflater.inflate(R.layout.frag_layout, container, false);
        init(view);
  }
    return view;
}

_overview放入类字段(而不是本地变量(,然后将您的侦听器代码更改为:

另外,使用replace代替hide add,这将防止Fragment already added错误。

替换添加到容器中的现有片段。这是 本质上与调用 remove(fragment( for 当前 添加了使用相同的contoterviewID添加的片段 add(int,fragment,string(,此处给出相同的参数。

参见示例:

if (item.getItemId() == R.id.nav_OverView && _current != R.id.nav_OverView) {
      if (_overView == null) {
          _overView = new Overview(); 
      }
     _fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
     _fragmentTransaction.replace(R.id.content_base_drawer, _overView);
     _fragmentTransaction.commit();
     _current = R.id.nav_OverView;
     viewIsAtHome = true;
}

最新更新