【发布时间】:2026-02-22 06:45:01
【问题描述】:
我正在构建一个应用程序,主要使用单个活动和片段来完成我在其中所做的一切。 在我的 MainActivity 上,我处理了一个抽屉菜单的创建,当我点击时,我的项目会转到 Fragments。当我打开应用程序时,它工作正常,我切换到另一个片段并且工作正常,但是当我回到原始片段时,我看到 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;
}
);
HomeFragment.java
homeFragments = new ArrayList<>();
homeFragments.add(newPostFragment("/...", "/..."));
homeFragments.add(newPostFragment("/...", "/..."));
newPostFragment 在哪里
private PostFragment newPostFragment(String /..., String /...) {
PostFragment fragment = new PostFragment();
Bundle args = new Bundle();
args.putString("/...", /...);
args.putString("/...", /...);
fragment.setArguments(args);
return fragment;
}
最后,PostFragment.java
@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 并将结果缓存在视图模型中。任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
我熟悉的问题,如果你知道请给我回答我的 fab 按钮不隐藏和扩展 fab 按钮不缩小你可以看到我的问题。 *.com/questions/64259818/…
-
不要使用 .beginTransaction().replace,而不是使用“add”和“addToBackStack”,例如 - getSupportFragmentManager().beginTransaction() .add(R.id.container_between, homeFragment , HomeFragment.TAG) .addToBackStack(HomeFragment.TAG).commit();
-
@SanwalSingh 我使用替换将另一个布局放置在我在
activity_main.xml中设置的 FrameLayout 占位符的位置。你用的是什么.TAG? -
TAG 是 Fragment 中的静态字符串,例如 - public static String TAG = "Home Fragment";
-
我使用了它,它使我想要的片段保持活力,但我真的不想让用户片段在内存中。既然用户fragment里面有fragment,我需要在user fragment的
onDestroy销毁吗? @SanwalSingh