标题栏中的后退导航-片段

hah*_*bab 1 android back-button android-fragments android-fragmentactivity

像这样问了很多问题,但是我尝试过的一切似乎都不起作用。本质上,我有一个主要活动,该活动根据用户单击的内容(默认为home片段)来调用不同的片段。我想在标题栏上有一个后退按钮,以返回上一个片段。

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

    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");
    }
Run Code Online (Sandbox Code Playgroud)

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

Siu*_*Siu 5

如果您扩展,请尝试以下操作AppCompatActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Include these 2 lines ONLY if need to use Toolbar from layout xml as Action Bar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //Add back navigation in the title bar
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        //
        //Other works to be done in onCreate.....
        //
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            //Title bar back press triggers onBackPressed()
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    //Both navigation bar back press and title bar back press will trigger this method
    @Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0 ) { 
            getFragmentManager().popBackStack(); 
        } 
        else { 
            super.onBackPressed(); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)