如何在按下手动后退按钮时返回上一个片段

时间:2014-08-01 06:12:31

标签: android android-fragments back-stack

我的应用中有一个活动和多个片段。我想在按下所有片段中的后退按钮时一个接一个地回来。

我使用了这段代码,但是当按下后退按钮时,它会逐一进入主要活动。此外,我想在主要活动进入时更改图标。(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");

        }
    });

5 个答案:

答案 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()方法实现这一点。