我正在使用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;
}