我的应用中有一个活动和多个片段。我想在按下所有片段中的后退按钮时一个接一个地回来。
我使用了这段代码,但是当按下后退按钮时,它会逐一进入主要活动。此外,我想在主要活动进入时更改图标。(msg_alert)
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = MainActivity.this
.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragment = new MainMenuLayout();
ft.replace(R.id.activity_main_content_fragment, fragment);
ft.commit();
btnBack.setVisibility(View.VISIBLE);
btnBack.setImageResource(R.drawable.msg_alert);
tvTitle.setText("Layout 0");
}
});
答案 0 :(得分:2)
假设您有两个片段A和B.片段A是在活动启动时附加的,以及通过替换片段A导航到片段B的任何用户事件。
1)将Fragment B添加到活动
// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragmentB, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
2)覆盖活动的onBackPressed以处理后退按钮事件。
@override
public void onBackPressed() {
// is there any fragment in backstack, if yes popout.
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
return;
}
super.onBackPressed();
}
答案 1 :(得分:0)
我在你的代码中看到你只是替换了内容框架。所以结果是背压它来到活动
还要确保在活动中有你的手动后退按钮
这是活动的测试xml
<?xml version="1.0" encoding="utf-8"?>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Back" />
<FrameLayout
android:id="@+id/activity_main_content_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
使用
Fragment fragment = new MainMenuLayout();
ft.replace(R.id.activity_main_content_fragment, fragment);
ft.addToBackStack(null);// TODO parameter here it tag of fragment or null or "" String
ft.commit();
有关片段backstack的更多信息,请访问此android开发者参考: - Fragment BackStack
答案 2 :(得分:0)
这是另一个选择,
在活动中。
Fragment secondfragment= new SecondFragmnet();
@Override
public void onBackPressed() {
if(secondfragment.isVisible()){
// replace 1st fragment
}else{
// Alert dialog for Exit App
}
// you can check multiple fragments.
希望它可以帮到你
答案 3 :(得分:0)
在进行片段之间的事务处理时,您必须使用addToBackStack()
方法...
阅读本文:Implement Back Navigation for Fragments
使用片段交易时使用以下代码...
String backStateName = fragment.getClass().getName(); // getting Fragment Name..
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment)
.addToBackStack(backStateName) //adding it to BackStack..
.commit();
答案 4 :(得分:0)
在片段中,我们没有后退导航..
我们可以通过replace()方法实现这一点。