在标题栏中返回导航 - 片段

时间:2017-07-10 01:42:16

标签: android android-fragments android-fragmentactivity back-button

有许多这样的问题,但我尝试的一切似乎都行不通。 基本上我有一个主要活动调用不同的片段,具体取决于用户点击的主片段是默认的。 我想在标题栏上有一个后退按钮,返回上一个片段。

我的片段是从主要活动调用的,如下所示:

    Fragment fragment = null;
    fragment = new nextFragment();

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack(null);
        fragmentTransaction.commit();
        fragmentTransaction.addToBackStack(null);

    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

但是由于ActionBarActivity活动已被弃用,我需要扩展AppCompatActivity而不是FragmentActivity,因此我可以使用actionbar(我假设这是我需要的)。 然而,我无法切换到我的片段。所以有人知道如何在我的片段中实现后退按钮或如何在这种情况下使用AppCompatActivity。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

如果您延长4445 | 20 | 1 4445 | 30 | 1 4445 | 30 | 2 7555 | 50 | 1 7555 | 50 | 2 7555 | 60 | 1

,请尝试此操作
AppCompatActivity

答案 1 :(得分:1)

您已通过调用

保存了最后使用的片段
  

addToBacktack(空).commit()

因此,调用它的下一步是在托管片段的活动中覆盖onBackPressed()

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0 ){
        getFragmentManager().popBackStack();
    }
    else {
        super.onBackPressed();
    }
}

因此,无论何时从片段中调用活动的onBackPressed(),片段都会返回到最后保存的片段。

答案 2 :(得分:1)

要在标题栏中添加“后退”按钮,必须将以下代码添加到“片段”中。

 Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar);
 AppCompatActivity AppCompatActivity = (AppCompatActivity)getActivity();
 AppCompatActivity.setSupportActionBar(toolbar);
 AppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    return view;
}

不要忘记将MainActivity扩展到AppCompatActivity。

然后,您必须在我的Fragment类中使用此Java代码,以响应用户点击操作栏中的后退/上移图标。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:            
        getActivity().onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
}
}