片段后退导航退出到主屏幕 - Android
我在活动中有一个片段,我可以使用FragmentManager和FragmentTransaction启动片段,但是当我尝试通过后退按钮导航回到活动时,应用程序退出。片段后退导航退出到主屏幕 - Android
这里是我的片断创建&交易在活动类:()
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回压回到主屏幕。请记住,我正在尝试返回到原始活动。
有什么建议吗?
P.S.如果需要,我可以添加我的片段代码
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();
}
}
(虽然这是不太理想的,因为你正在编码要删除的内容)。
我试了一下,仍然需要两次后退,并退出到主屏幕。我无法弄清楚为什么它不会回到主要活动 –
恩,好吧。你可以尝试使用'fragmentTransaction.add'而不是'.replace'?如果仍然不起作用,你可以尝试使用'fm.beginTransaction()。remove(df)。在你的'onBackPressed'中提交()'? – RogueBaneling
如果这些都不帮助,我会删除我的答案,因为我只是猜测。 – RogueBaneling
导航是工作,但在我的片段的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;
}
什么是您的活动类扩展?即“ActionBarActivity”,“Activity”等? – RogueBaneling
@RogueBaneling活动类扩展AppCompatActivity –