我的问题很简单,但我无法弄清楚为什么会这样。
我有一个我在活动开始时创建的片段。如果它已经创建,我只需通过标记找到它就可以恢复它。
我有一个BottomNavigationView,我按以下方式处理:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_A) {
fragmentManager = getSupportFragmentManager();
Fragment fragment = getSupportFragmentManager().findFragmentByTag("newFragment");
if(fragment != null){
fragmentManager.beginTransaction().replace(R.id.fragment_container,fragment).commit();
} else{
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
newFragment = new NewFragment();
Bundle bundle = new Bundle();
bundle.putInt(...);
bundle.putSerializable(...);
newFragment.setArguments(bundle);
fragmentTransaction.addToBackStack("newFragment");
fragmentTransaction.replace(R.id.fragment_container, newFragment,"newFragment");
fragmentTransaction.commit();
}
}
if (id == R.id.action_B) {
fragmentManager = getSupportFragmentManager();
secondNewFragment = new SecondNewFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(...);
secondNewFragment.setArguments(bundle);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack("secondNewFragment");
fragmentTransaction.add(R.id.fragment_container, secondNewFragment,"secondNewFragment").commit();
}
}
在活动创建时,R.id.action_A
是所选项目,并且在if / else条件中片段为null
,它进入else
条件,创建片段和位置它在持有人。之后我改为tab R.id.action_B
,它创建了SecondNewFragment,因为我每次都需要创建这个片段(数据来自服务)。当我按下R.id.action_A
选项卡时,如果创建了newFragment,我想保留其数据,所以我只通过查找它的标签来检索它,但是当它到达顶部(可见)时,我想要在onCreateView()
中进行某种验证,但是一旦用这段代码替换它就不会调用它们的任何状态:
if(fragment != null){
fragmentManager.beginTransaction().replace(R.id.fragment_container,fragment).commit();
}
我已经阅读了片段生命周期,如果片段已经创建完成后一切正常,当我使用findFragmentByTag()
检索它并将其放回容器中时,onCreateView()
应该再次运行但是某些原因它没有。
有关详细信息,当我将NewFragment
替换为SecondNewFragment
时,onDestroyView()
中的NewFragment
未被调用,但我的理解是,当片段不可见时,它是应该销毁View
我的活动的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:id="@+id/global_rl"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/titlebar01">
<com.bankinter.portugal.bmb.widget.BMBTextView
android:id="@+id/global_tv"
style="@style/FontPageTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/global"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/global_rl"
android:layout_above="@+id/bottom_navigation"/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/BR01"
app:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state"
app:menu="@menu/bottom_nav_menu"/>
</RelativeLayout>
有什么建议吗?提前谢谢。