其他分享
首页 > 其他分享> > 如何实现android工具栏后退按钮

如何实现android工具栏后退按钮

作者:互联网

我正在使用自定义工具栏.我需要添加回按钮.现在我使用此代码添加后退按钮.

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        toolbar.setBackgroundColor(getResources().getColor(R.color.white));
        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

这很好用.我可以看到添加了后退按钮.但请考虑我在Fragment1中没有后退按钮的情况.现在我转到Fragment2,然后添加Back Button.从片段2我打开片段3然后我再次添加后退按钮.

现在,当我按下fragment3中的后退按钮返回到fragment2时,我必须检查片段堆栈以查看片段2中是否需要后退按钮.

当我们将片段推送到堆栈时,还有其他方法可以自动处理后退按钮吗?

解决方法:

您可以非常轻松地处理后退图标.如果你的所有片段都在单个Activity中,我真的建议用以下方式处理它:

首先创建一个抽象的BaseFragment类,它实现了FragmentManager .OnBackStackChangedListener,然后在其中放入以下方法:

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mainActivity = (MainActivity) getActivity();

        getFragmentManager().addOnBackStackChangedListener(this);

        shouldDisplayHomeUp();
    }

    @Override
    public void onBackStackChanged() {
        shouldDisplayHomeUp();
    }


    public boolean shouldDisplayHomeUp() {
        //Enable Up button only  if there are entries in the back stack
        boolean canBack = false;
        try {
            canBack = getFragmentManager().getBackStackEntryCount() > 0;
        } catch (Exception ex) {
//            Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage
        }

        if (canBack) {
            mainActivity.drawerDisable();
        } else {
            mainActivity.drawerEnable();
        }
        return canBack;
    }

通过这种方式disableDrawer& enableDrawer函数处理你的Icon和OnBackPressed方法在你的活动中处理你的BackStack,如果你需要按下后退图标显示.你的onBackPressed应该是这样的:

 int backStackCount = getSupportFragmentManager().getBackStackEntryCount();

            if (backStackCount == 0) {
                //nothing exist in backStack OS handle it
                super.onBackPressed();
            } else {

                getSupportFragmentManager().popBackStack();
}

查看完整实施here.

标签:android,android-toolbar,android-navigation
来源: https://codeday.me/bug/20191006/1860525.html