防止每次点击bottomnavigation选项卡时重新创建片段
问题描述:
我在Android中使用BottomNavigationView来制作一个像Instagram一样的应用程序。我正在使用navigationTabs的片段。应用程序有5个标签初始化我已将中间选项卡设置为活动选项卡,并在应用程序启动后加载它。当我点击任何其他标签网络调用和数据加载。现在,当我按下后退按钮或再次单击最后一个选项卡(启动时加载该选项卡)时,将重新创建片段,并调用网络加载相同的数据。我想用相同的数据显示以前的片段而不重新创建。防止每次点击bottomnavigation选项卡时重新创建片段
我使用
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;
}
我知道使用删除和添加是一样的使用代替。
任何帮助表示赞赏。
答
让_overview
成类字段(而不是局部变量),并改变你的听众代码如下:
此外,使用replace
代替hide
+ add
,这将防止Fragment already added
错误。
替换已添加到容器的现有片段。这是 基本相同,调用删除(片段)为所有当前 添加片段添加相同containerViewId是然后 加(INT,片段,字符串)这里给出了相同的论点。
见例如:
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;
}
答
之前创建视图,你可以检查的观点是不与否,下面的代码片段帮助重建问题。
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;
}
看到这个[链接](http://stackoverflow.com/questions/14354885/android-fragments-backstack)。或者,如果这不会为你工作,使用单例类来保存第一次加载数据,并在它后面使用它。 – ADM
发布您的'setOnNavigationItemSelectedListener'代码,您可能正在创建您的片段 – marmor
@marmor更新...现在检查 – Joe