Android 片段中的OnCreateView只被第一次调用,不会再次调用

Android 片段中的OnCreateView只被第一次调用,不会再次调用,android,android-fragments,Android,Android Fragments,我正在构建一个应用程序,主要是使用单个活动和我在其中所做的一切片段。 在我的main活动中,我处理一个抽屉菜单的创建,在这个菜单中,当我点击时,我的项目将被分割。当我打开应用程序时,它可以正常工作,我切换到另一个片段,这也可以正常工作,但是当我返回到原始片段时,我看到了UI,但没有显示任何数据。我得出的结论是,显示我的内容的片段没有被创建,调试器也没有遇到任何断点,所以我认为我是对的 MainActivity.java navigationView.setNavigationItemSelect

我正在构建一个应用程序,主要是使用单个活动和我在其中所做的一切片段。 在我的main活动中,我处理一个抽屉菜单的创建,在这个菜单中,当我点击时,我的项目将被分割。当我打开应用程序时,它可以正常工作,我切换到另一个片段,这也可以正常工作,但是当我返回到原始片段时,我看到了UI,但没有显示任何数据。我得出的结论是,显示我的内容的片段没有被创建,调试器也没有遇到任何断点,所以我认为我是对的

MainActivity.java

navigationView.setNavigationItemSelectedListener(
    item -> {
        switch (item.getItemId()) {
            case R.id.nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, homeFragment).commit();
                navigationView.setCheckedItem(R.id.nav_home);
                break;
            case R.id.nav_user_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, userFragment).commit();
                navigationView.setCheckedItem(R.id.nav_user_profile);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
);
homeFragments = new ArrayList<>();
homeFragments.add(newPostFragment("/...", "/..."));
homeFragments.add(newPostFragment("/...", "/..."));
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_posts, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    Log.i("Post", "onViewCreated: Called");
    super.onViewCreated(view, savedInstanceState);
    mToken = InjectorUtils.getInstance().provideTokenRepository(getActivity().getApplication()).getToken();
    /... = getArguments().getInt("/...", 0);
    /... = getArguments().getString("/...", "");
    /... = getArguments().getString("/...", "");
    initRecycleView();
    initializeUI();
}
HomeFragment.java

navigationView.setNavigationItemSelectedListener(
    item -> {
        switch (item.getItemId()) {
            case R.id.nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, homeFragment).commit();
                navigationView.setCheckedItem(R.id.nav_home);
                break;
            case R.id.nav_user_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, userFragment).commit();
                navigationView.setCheckedItem(R.id.nav_user_profile);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
);
homeFragments = new ArrayList<>();
homeFragments.add(newPostFragment("/...", "/..."));
homeFragments.add(newPostFragment("/...", "/..."));
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_posts, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    Log.i("Post", "onViewCreated: Called");
    super.onViewCreated(view, savedInstanceState);
    mToken = InjectorUtils.getInstance().provideTokenRepository(getActivity().getApplication()).getToken();
    /... = getArguments().getInt("/...", 0);
    /... = getArguments().getString("/...", "");
    /... = getArguments().getString("/...", "");
    initRecycleView();
    initializeUI();
}
最后,
PostFragment.java

navigationView.setNavigationItemSelectedListener(
    item -> {
        switch (item.getItemId()) {
            case R.id.nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, homeFragment).commit();
                navigationView.setCheckedItem(R.id.nav_home);
                break;
            case R.id.nav_user_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, userFragment).commit();
                navigationView.setCheckedItem(R.id.nav_user_profile);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
);
homeFragments = new ArrayList<>();
homeFragments.add(newPostFragment("/...", "/..."));
homeFragments.add(newPostFragment("/...", "/..."));
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_posts, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    Log.i("Post", "onViewCreated: Called");
    super.onViewCreated(view, savedInstanceState);
    mToken = InjectorUtils.getInstance().provideTokenRepository(getActivity().getApplication()).getToken();
    /... = getArguments().getInt("/...", 0);
    /... = getArguments().getString("/...", "");
    /... = getArguments().getString("/...", "");
    initRecycleView();
    initializeUI();
}
我看不出这不起作用的原因,因为当我第一次打开应用程序时,它没有任何问题。我还使用LiveData并将结果缓存在viewmodel中。任何帮助都将不胜感激


谢谢。

您将获得以前创建的片段实例,请尝试使用“onResume”同步视图和模型。

如果您想再次调用onCreateView(),只需重新连接片段

getSupportFragmentManager.beginTransaction().detach(fragment).commitNow()
getSupportFragmentManager.beginTransaction().attach(fragment).commitNow()

我熟悉的问题,如果你知道,请给我回答我的晶圆厂按钮不隐藏和扩展晶圆厂按钮不收缩你可以看到我的问题。不要使用.beginTransaction().replace,而要使用类似-getSupportFragmentManager().beginTransaction().add(R.id.container_-between,homeFragment,homeFragment.TAG)的“add”和“addToBackStack”来代替它@SanwalSingh我使用replace将另一个布局放置在我在
activity\u main.xml
中设置的FrameLayout占位符的位置。您正在使用的
.TAG
是什么?TAG是片段中的静态字符串,比如-publicstaticstring TAG=“Home Fragment”;我使用了它,它使我想要的片段保持活动状态,但我并不真的想将用户片段保存在内存中。既然用户片段中有片段,我是否需要在用户片段的
ondestory
中销毁它们@桑瓦尔辛格