![](/img/trans.png)
[英]Manage toolbar's navigation and back button from fragment to fragment in android
[英]Fragment Back Navigation Exiting to Home Screen - Android
我在一个活动中有一个片段,可以使用FragmentManager和FragmentTransaction启动该片段,但是当我尝试通过“后退”按钮导航回到“活动”时,应用程序退出。
这是我在Activity类中的片段创建和交易:
DetailFragment df = new DetailFragment();
try {
df.initFragment(jsonObject);
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, df);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
我也重写onBackPressed()
@Override
public void onBackPressed() {
super.onBackPressed();
}
通过上述设置,按一下“后退”按钮将返回主屏幕。
我还尝试修改onBackPressed()来执行以下操作:
@Override
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
} else {
super.onBackPressed();
}
}
在onBackPressed()的第二个版本中,需要2次后退操作才能返回到主屏幕。 请记住,我正在尝试返回原始活动。
有什么建议么?
PS我可以根据需要添加片段代码
您的第二个版本的onBackPressed()
需要2次后按才能返回到主屏幕。 因此,似乎fm.popBackStack()
正在被调用。 尝试将其替换为popBackStackImmediate()
。
编辑:创建片段时,请尝试使用以下内容代替.replace
:
fragmentTransaction.add(R.id.fragment_container, df);
如果仍然无法解决问题,请尝试:
@Override
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (df.isVisible) {
fm.beginTransaction().remove(df).commit();
} else {
super.onBackPressed();
}
}
(尽管这不太理想,因为您正在硬编码要删除的内容)。
导航正常,但是在片段的onCreateView中,我对片段视图使用了setContentView(),该片段视图将片段视图绘制到了主活动上,因此,如果按下两次后退按钮似乎会退出,但实际上是在返回对于主要活动,它只是重新绘制了主要活动,因此无法分辨。
感谢您的帮助@RogueBaneling!
原始代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_detail, container, false);
fragmentView.setClickable(true);
getActivity().setContentView(R.layout.fragment_detail);
final TextView movieTitleText = (TextView) getActivity().findViewById(R.id.movie_title_text);
movieTitleText.setText(title);
// editing textView code...
return fragmentView;
}
成:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_detail, container, false);
fragmentView.setClickable(true);
final TextView movieTitleText = (TextView) fragmentView.findViewById(R.id.movie_title_text);
movieTitleText.setText(title);
// editing textView code...
return fragmentView;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.