昨日(17-10-2014)私は自分のAppのAndroid SDKとsupport-library-v4.jar
をアップデートしました。今度はActionBarDrawerToggle
name__に関連した非推奨の警告が出ますので、 を読んでくださいsupport-library-v7.appcompact.jar
内のActionBarDrawerToggle
name__。
ここに私の活動のいくつかの部分が関連している可能性があります。
import Android.app.ActionBar;
import Android.app.Activity;
import Android.content.res.Configuration;
import Android.os.Bundle;
import Android.support.v4.app.ActionBarDrawerToggle;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.view.GravityCompat;
import Android.support.v4.widget.DrawerLayout;
import Android.view.Menu;
import Android.view.MenuInflater;
import Android.view.MenuItem;
import Android.view.View;
import Android.webkit.WebView;
import Android.widget.LinearLayout;
import Android.widget.ListView;
import Android.widget.RelativeLayout;
import Android.widget.TextView;
public class MyActivity extends FragmentActivity {
private ActionBar bar;
private CustomActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawer;
private ListView mDrawerList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_infoviewer);
bar = this.getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
bar.setDisplayShowTitleEnabled(false);
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawer.setBackgroundColor(getResources().getColor(R.color.White));
initNavMenu();
try {
mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer);
} catch (RuntimeException e) {
e.printStackTrace();
}
mDrawer.setDrawerListener(mDrawerToggle);
}
....
private void initNavMenu() {
NavMenuAdapter mAdapter = MyDrawers.getDefaultDrawer(MyActivity.this, true);
mDrawerList = (ListView) findViewById(R.id.drawer);
mDrawerList.setBackgroundColor(getResources().getColor(R.color.GreenMoneyDark));
if (mDrawerList != null) mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener(MyActivity.this, mDrawer, mDrawerList));
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
@Override
public void onDrawerClosed(View view) {
bar.setTitle(getString(R.string.ns_menu_close));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
bar.setTitle(getString(R.string.ns_menu_open));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
}
}
Support-library-v7をコピーして置き換えようとしました
import Android.support.v4.app.ActionBarDrawerToggle;
と
import Android.support.v7.app.ActionBarDrawerToggle;
これはコンパイルの問題を引き起こしています
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
だから私はR.drawable.action_drawer
をに置き換えてみました
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
これはコンパイルされますが、実行時にクラッシュします。
Java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$attr;
at Android.support.v7.widget.Toolbar.<init>(Toolbar.Java:190)
at Android.support.v7.widget.Toolbar.<init>(Toolbar.Java:186)
Android-support-v7-appcompat.jar
がプロジェクトの依存関係に正しく追加されていることに注意してください。
ライブラリの依存関係にAndroid-support-v7-appcompat.jar
を追加するだけでは不十分で、SDKのパス\Android-sdk\extras\Android\support\v7\appcompat
で見つけることができるモジュールをプロジェクトにインポートする必要があります。その後、このようにプロジェクト構造を構成するモジュール依存関係を追加します。
それ以外の場合はサポートライブラリのクラスファイルのみが含まれ、アプリはエラーの原因となっている他のリソースをロードできません。
さらにreVerseが提案したようにこれを交換してください
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
と
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
ツールバー を必要とするActionBarDrawerToggle
のスーパーコールを使用する必要はありません。これは、次のコンストラクタを使用する代わりに、という意味です。
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)
これを使うべきです:
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)
だから基本的にあなたがしなければならない唯一のことはあなたのカスタムdrawable
を削除することです:
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
"新しい" ActionBarDrawerToggleについての詳細 ドキュメント内(クリック) 。
import Android.support.v7.app.ActionBarDrawerToggle;
を使わなければなりません
そしてコンストラクタを使う
public CustomActionBarDrawerToggle(Activity mActivity,DrawerLayout mDrawerLayout)
{
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
また、引き出しの切り替えボタンが暗くなった場合は、サポートライブラリで提供されているsupportActionBarを使用する必要があります。
あなたはこのリンクからsupportActionbarを実装することができます: http://developer.Android.com/training/basics/actionbar/setting-up.html
の代わりに
drawer.setDrawerListener(toggle);
あなたが使用することができます
drawer.addDrawerListener(toggle);