已创建的片段不会调用onCreateView

时间:2017-04-04 15:13:39

标签: android android-fragments

我的问题很简单,但我无法弄清楚为什么会这样。

我有一个我在活动开始时创建的片段。如果它已经创建,我只需通过标记找到它就可以恢复它。

我有一个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>

有什么建议吗?提前谢谢。

0 个答案:

没有答案