带片段的后退按钮导航

时间:2018-05-20 13:43:28

标签: android android-fragments android-toolbar android-navigation

我正在建立一个有点画廊应用程序。我使用一个活动来保存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);
    }
}

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用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);
    }
}

答案 2 :(得分:0)

@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);
    } }

答案 3 :(得分:0)

如果每个片段在自己的布局中都有Toolbar,那么ToolbaronViewCreatedView中的onCreateView后,setNavigationOnClickListener就可以轻松访问Fragment。之后,您可以设置导航图标并调用Fragment。在内部,您可以选择几种方法来替换现有removeFragment现有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(); 中添加server::server(boost::filesystem::path mappath) : mappath(mappath) { if(boost::filesystem::is_directory(mappath) && boost::filesystem::exists(mappath)) { // Do some stuff here } else { boost::filesystem::create_directory(mappath); } } 且不为空。例如:

mappath