Android ActionBarDrawerToggle构造函数具有不可满足的类型

Android ActionBarDrawerToggle构造函数具有不可满足的类型,android,Android,我正在尝试实现一个导航抽屉,我得到了这个错误 ActionBarDrawerToggle无法应用于android.support.v7.widget.Toolbar mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) R.d

我正在尝试实现一个导航抽屉,我得到了这个错误

ActionBarDrawerToggle无法应用于android.support.v7.widget.Toolbar

 mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.drawer_open,
                R.string.drawer_close)
R.drawable.ic.drawer
给出错误信息。我搜索了整个
stackoverflow
,发现另一个主题是,您需要创建一个工具栏,并将其添加为操作栏,然后将此工具栏传递给此构造函数,但我如何创建工具栏以便显示
ic_drawer

我试过这个:

Toolbar toolbar = new ToolBar(getApplicationContext);
toolbar.setLogo(R.drawable.ic_drawer);
但当我运行时,应用程序崩溃了。请帮助我解决此问题。

v4现在已不推荐使用。您应该在support-v7-appcompat中使用

您不再需要指定图像的资源:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);

    }

    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);

    }
};

mDrawerLayout.setDrawerListener(drawerToggle);
有关完整的示例,请参见《v4现已弃用》。您应该在support-v7-appcompat中使用

您不再需要指定图像的资源:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);

    }

    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);

    }
};

mDrawerLayout.setDrawerListener(drawerToggle);
有关完整示例,请参见我的代码:

public class HomeActivity extends ActionBarActivity implements
    DrawerCloseListener {
private Toolbar toolbar;
private DrawerLayout drawer;
private ActionBarDrawerToggle drawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    toolbar = (Toolbar) findViewById(R.id.home_toolbar);
    setSupportActionBar(toolbar);
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.app_name, R.string.app_name);
    drawerToggle.setHomeAsUpIndicator(R.drawable.icon_nav);
    drawer.setDrawerListener(drawerToggle);
}

/*
 * (non-avadoc) <p>Title: onResume</p> <p>Description: </p>
 * 
 * @params
 * 
 * @overrided @see android.support.v4.app.FragmentActivity#onResume()
 */
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    toolbar.setTitle("");
    toolbar.setNavigationIcon(R.drawable.icon_nav);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    return super.onOptionsItemSelected(item);
}

/*
 * (non-avadoc) <p>Title: onConfigurationChanged</p> <p>Description: </p>
 * 
 * @params @param newConfig
 * 
 * @overrided @see
 * android.support.v7.app.ActionBarActivity#onConfigurationChanged
 * (android.content.res.Configuration)
 */
@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}

/*
 * (non-avadoc) <p>Title: onPostCreate</p> <p>Description: </p>
 * 
 * @params @param savedInstanceState
 * 
 * @overrided @see android.app.Activity#onPostCreate(android.os.Bundle)
 */
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

/*
 * (non-avadoc) <p>Title: onBackPressed</p> <p>Description: </p>
 * 
 * @params
 * 
 * @overrided @see android.support.v7.app.ActionBarActivity#onBackPressed()
 */
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
        drawer.closeDrawers();
        return;
    }
    super.onBackPressed();
}

/*
 * (non-avadoc) <p>Title: onDrawerClose</p> <p>Description: </p>
 * 
 * @params
 * 
 * @overrided @see com.yeepay.stall.abs.DrawerCloseListener#onDrawerClose()
 */
@Override
public void onDrawerClose() {
    // TODO Auto-generated method stub
    if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
        drawer.closeDrawers();
    }
}
看看我的代码:

public class HomeActivity extends ActionBarActivity implements
    DrawerCloseListener {
private Toolbar toolbar;
private DrawerLayout drawer;
private ActionBarDrawerToggle drawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    toolbar = (Toolbar) findViewById(R.id.home_toolbar);
    setSupportActionBar(toolbar);
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.app_name, R.string.app_name);
    drawerToggle.setHomeAsUpIndicator(R.drawable.icon_nav);
    drawer.setDrawerListener(drawerToggle);
}

/*
 * (non-avadoc) <p>Title: onResume</p> <p>Description: </p>
 * 
 * @params
 * 
 * @overrided @see android.support.v4.app.FragmentActivity#onResume()
 */
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    toolbar.setTitle("");
    toolbar.setNavigationIcon(R.drawable.icon_nav);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    return super.onOptionsItemSelected(item);
}

/*
 * (non-avadoc) <p>Title: onConfigurationChanged</p> <p>Description: </p>
 * 
 * @params @param newConfig
 * 
 * @overrided @see
 * android.support.v7.app.ActionBarActivity#onConfigurationChanged
 * (android.content.res.Configuration)
 */
@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}

/*
 * (non-avadoc) <p>Title: onPostCreate</p> <p>Description: </p>
 * 
 * @params @param savedInstanceState
 * 
 * @overrided @see android.app.Activity#onPostCreate(android.os.Bundle)
 */
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

/*
 * (non-avadoc) <p>Title: onBackPressed</p> <p>Description: </p>
 * 
 * @params
 * 
 * @overrided @see android.support.v7.app.ActionBarActivity#onBackPressed()
 */
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
        drawer.closeDrawers();
        return;
    }
    super.onBackPressed();
}

/*
 * (non-avadoc) <p>Title: onDrawerClose</p> <p>Description: </p>
 * 
 * @params
 * 
 * @overrided @see com.yeepay.stall.abs.DrawerCloseListener#onDrawerClose()
 */
@Override
public void onDrawerClose() {
    // TODO Auto-generated method stub
    if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
        drawer.closeDrawers();
    }
}

ActionBarDrawerToggle构造函数如下所示

android.support.v7.app.ActionBarDrawerToggle.ActionBarDrawerToggle(Activity activity,
            DrawerLayout drawerLayout, 
            Toolbar toolbar, 
            int openDrawerContentDescRes, 
            int closeDrawerContentDescRes)
您正在传递
R.drawable.ic\u drawer
drawable而不是toolbar,这就是为什么会出现此错误

在布局文件中添加工具栏,如下所示

<RelativeLayout
            ...>

<include
    android:id="@+id/tool_bar"
    layout="@layout/toolbar"></include>


<android.support.v4.widget.DrawerLayout
              android:layout_below="@+id/tool_bar"
              ...>


</android.support.v4.widget.DrawerLayout>

</RelativeLayout>

希望它能解决您的错误。

ActionBarDrawerToggle构造函数如下所示

android.support.v7.app.ActionBarDrawerToggle.ActionBarDrawerToggle(Activity activity,
            DrawerLayout drawerLayout, 
            Toolbar toolbar, 
            int openDrawerContentDescRes, 
            int closeDrawerContentDescRes)
您正在传递
R.drawable.ic\u drawer
drawable而不是toolbar,这就是为什么会出现此错误

在布局文件中添加工具栏,如下所示

<RelativeLayout
            ...>

<include
    android:id="@+id/tool_bar"
    layout="@layout/toolbar"></include>


<android.support.v4.widget.DrawerLayout
              android:layout_below="@+id/tool_bar"
              ...>


</android.support.v4.widget.DrawerLayout>

</RelativeLayout>
希望它能解决您的错误。

使用不推荐的方法(v4)和需要可绘制的构造函数,这太疯狂了

ActionBarDrawerToggle的最新版本(2015年9月)使用带工具栏的构造函数。但是,如果只是使用操作栏切换导航抽屉,请改用

大宗报价 给定的活动将链接到指定的抽屉布局,其Actionbar的“向上”按钮将设置为自定义可绘制。 当抽屉关闭时,这个抽屉会显示一个汉堡图标,当抽屉打开时会显示一个箭头。抽屉打开时,它会在这两种状态之间设置动画

使用一个不推荐使用的方法(v4)和一个需要可绘制的构造函数是很疯狂的

ActionBarDrawerToggle的最新版本(2015年9月)使用带工具栏的构造函数。但是,如果只是使用操作栏切换导航抽屉,请改用

大宗报价 给定的活动将链接到指定的抽屉布局,其Actionbar的“向上”按钮将设置为自定义可绘制。 当抽屉关闭时,这个抽屉会显示一个汉堡图标,当抽屉打开时会显示一个箭头。抽屉打开时,它会在这两种状态之间设置动画


当我将工具栏作为第三个参数传递时,应用程序崩溃崩溃崩溃日志是什么@HeisenBerg@HeisenBerg您是否在布局文件中添加了工具栏?请检查我的更新答案。我已经找到了一个解决方案,从v7更改为v4。我以后一定会试试这个。非常感谢。当我将工具栏作为第三个参数传递时,应用程序崩溃。崩溃日志是什么@HeisenBerg@HeisenBerg您是否在布局文件中添加了工具栏?请检查我的更新答案。我已经找到了一个解决方案,从v7更改为v4。我以后一定会试试这个。非常感谢。实际上我用的是v7。我把它改成v4,现在可以工作了。谢谢你应该使用V7,只要把你的V4构造函数改成V7就行了——实际上我正在使用V7。我把它改成v4,现在可以工作了。谢谢您应该使用V7,只需将V4构造函数更改为V7即可