如何获取DrawerArrowDrawable的click事件

时间:2016-03-11 08:34:43

标签: android android-fragments navigation-drawer

我在导航抽屉的打开和关闭过程中使用DrawerArrowDrawable来设置汉堡包图标的动画。以下是我用于此的代码段:

DrawerArrowDrawable drawerArrow = new DrawerArrowDrawable(this);
toolbar.setNavigationIcon(drawerArrow)
mDrawerToggle.syncState();

现在,当我打开片段时,我使用actionBar.setHomeAsUpIndicator(R.drawable.back_icon);&在该片段中actionBar.setDisplayHomeAsUpEnabled(true);,将导航图标更改为后退图标。图标发生变化,但该按钮的功能保持不变,即打开导航抽屉,但我想回到上一个片段(使用popBackStack)。

我试图覆盖onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
        FragmentManager fm = getSupportFragmentManager();
        if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack();
        }
        break;
    }
}

但是当我按导航图标时,控件永远不会进入上面的区块。

如果我知道如何拦截DrawerArrowDrawable的点击事件?我可以运行popBackStack并做我想做的事。

2 个答案:

答案 0 :(得分:0)

 toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       FragmentManager fm = getSupportFragmentManager();
                       if (fm.getBackStackEntryCount() > 0) {
                       fm.popBackStack();
                       }
                    }
                });

答案 1 :(得分:0)

在导航抽屉活动中添加此侦听器:

private FragmentManager.OnBackStackChangedListener mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() {
    @Override
    public void onBackStackChanged() {
        setActionBarArrowDependingOnFragmentsBackStack();
    }
};

然后创建此方法:

public void setActionBarArrowDependingOnFragmentsBackStack() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
    mDrawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

现在覆盖这些方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (mDrawerToggle.isDrawerIndicatorEnabled() && mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    } else if (item.getItemId() == android.R.id.home && getFragmentManager().popBackStackImmediate()) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    return super.onCreateOptionsMenu(menu);
}

@Override
public void onDestroy() {
    super.onDestroy();

    getFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener);

}

最后在onCreate()方法中添加这一行:

getFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);