从LanguageActivity返回时,如何回到MainActivity的SettingFragment?
问题:从LanguageActivity返回时无法回到原SettingFragment
我创建了MainActivity,并通过导航栏切换4个不同的Fragment。其中在SettingFragment中,我设置了一个切换语言按钮,点击后会跳转到LanguageActivity;但当我从LanguageActivity通过返回按钮回到MainActivity时,却被重定向到HomeFragment,而非我离开时的SettingFragment。请问需要修改哪些代码才能实现返回原Fragment的需求?
SettingFragment 相关代码
LinearLayout changelanguage = view.findViewById(R.id.layoutChangeLanguage); changelanguage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), LanguageActivity.class); startActivity(intent); } });
LanguageActivity 相关代码
ImageButton backButton = findViewById(R.id.Back_Button); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view){ Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clear all the stack activity startActivity(intent); onBackPressed(); } });
解决方案
你的问题出在LanguageActivity的返回按钮逻辑上:
Intent.FLAG_ACTIVITY_CLEAR_TOP会清除MainActivity之上的所有Activity,并且重新创建MainActivity实例,直接导致MainActivity重置为初始状态(显示HomeFragment)。- 同时调用
startActivity(intent)和onBackPressed()属于重复操作,逻辑冗余且冲突。
直接修改LanguageActivity的返回按钮逻辑即可,系统默认的返回栈会自动保留MainActivity之前的Fragment状态:
ImageButton backButton = findViewById(R.id.Back_Button); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view){ onBackPressed(); } });
额外注意:如果你的MainActivity使用导航组件(Navigation Component)管理Fragment,确保不要在onCreate()方法中每次都强制跳转到HomeFragment(比如不要写navController.navigate(R.id.homeFragment)这类无判断的跳转),只在首次创建时初始化导航即可。
内容的提问来源于stack exchange,提问作者Rinchen
相关产品推荐
相关产品推荐

