不推荐使用ActionBarDrawerToggle

时间:2015-02-24 10:42:07

标签: android navigation-drawer actionbardrawertoggle

我试图在我的应用中实现android.support.v4.app.ActionBarDrawerToggle;因为这个类已被弃用

  

此类已弃用。请使用ActionBarDrawerToggle   支持-V7-程序兼容性。

我已切换到android.support.v7.app.ActionBarDrawerToggle。

在我以这种方式调用构造函数之前:

mDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            mDrawerLayout,         /* DrawerLayout object */
            R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
            R.string.drawer_open,  /* "open drawer" description for accessibility */
            R.string.drawer_close  /* "close drawer" description for accessibility */
        ){
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };

但在我切换到较新的v7支持库后,收到错误

"ActionBarDrawerToggle() in ActionBarDrawerToggle cannot be applied to:

toolbar: android.support.v7.widget.Toolbar 
Actual arguments: R.drawable.ic_drawer (int)"

显然我没有在构造函数中引入适当的工具栏,但我不确定理解两个冲突参数之间的区别。如何获得所需的工具栏?

2 个答案:

答案 0 :(得分:19)

我通过导入较新的android.support.v7.app.ActionBarDrawerToggle并使用RecyclerView而不是ListView解决了我的问题,如下例所示:How to make Material Design Navigation Drawer With Header View

private ActionBarDrawerToggle mDrawerToggle;
//... ... 
mDrawerToggle = new ActionBarDrawerToggle(
            this,
            mDrawerLayout,
            toolbar,
            R.string.drawer_open, R.string.drawer_close){
                    @Override
                    public void onDrawerOpened(View drawerView) {
                        super.onDrawerOpened(drawerView);
                        // code here will execute once the drawer is opened 
                        getSupportActionBar().setTitle(mTitle);
                        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                    }
                    @Override
                    public void onDrawerClosed(View drawerView) {
                        super.onDrawerClosed(drawerView);
                        // Code here will execute once drawer is closed
                        getSupportActionBar().setTitle(mDrawerTitle);
                        invalidateOptionsMenu();
    };

如果您仍有问题,请点击此处: How to replace deprecated android.support.v4.app.ActionBarDrawerToggle

答案 1 :(得分:0)

转到gradle属性并添加

android.useAndroidX=true



android.enableJetifier=true

之后,将其导入您的Java文件中

import androidx.appcompat.app.ActionBarDrawerToggle;