繁体   English   中英

带有片段的后退按钮导航

[英]back button navigation with fragments

我正在构建一个有点画廊的应用程序。 我使用一个活动来保存fragment_1,在其中我在recyclerview中显示图像。 我可以从fragment_1转到fragment_2。 两个片段都有各自不同的工具栏。 我希望通过按工具栏中的向后箭头,从fragment_2返回fragment_1。

我如何从fragment_1转到fragment_2:

Fragment2 fragment2 = new Fragment2();
    getActivity().getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, fragment2)
            .addToBackStack(null).commit();

我在fragment_2中已经做了什么:

Toolbar toolbar = getView().findViewById(R.id.toolbar_2);
    ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);

这不起作用:

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

如果要从片段中触发onOptionsItemSelected ,则需要将setHasOptionsMenu设置为true ,例如从onViewCreated

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
   setHasOptionsMenu(true);
}

使用popBackStack()方法从后堆栈中删除片段。 尝试使用以下代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            getActivity().getSupportFragmentManager().popBackStack();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            getActivity().getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new fragment1).commit();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    } }

如果每个片段在自己的布局中都有Toolbar ,则可以在onViewCreated ViewonCreateView膨胀后轻松访问onViewCreated Toolbar 之后,您可以设置导航图标并调用setNavigationOnClickListener 在里面你可以选择从几个方法既可以取代退出Fragment通过新的Fragmentremove现有的Fragment或使用popBackStack 在看起来像这样的代码中:

Toolbar toolbar = view.findViewById(R.id.toolbar) // id of your toolbar 
 toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); // set the back arrow in toolbar 

    //set click listener on back arrow
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getFragmentManager().popBackStack();
 });

要使用这个方法,你需要添加Fragment在没有空addToBackStack 例如:

getFragmentManager().beginTransaction()
        .add(R.id.container, your fragment here)
        .addToBackStack("BackStack").commit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM