Gestern (17-10-2014) habe ich das Android SDK und support-library-v4.jar
meine App aktualisiert. Jetzt erhalte ich eine Warnung bezüglich der Ablehnung. Das ActionBarDrawerToggle
Lesen der Dokumentation scheint, dass ich das ActionBarDrawerToggle
in verwenden muss support-library-v7.appcompact.jar
.
Hier einige Teile meiner Aktivität, die relevant sein könnten:
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()
}
}
}
Ich habe versucht, support-library-v7 zu kopieren und zu ersetzen
import android.support.v4.app.ActionBarDrawerToggle;
mit
import android.support.v7.app.ActionBarDrawerToggle;
Dies hat zu Kompilierungsproblemen in geführt
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
Also habe ich versucht , zu ersetzen , R.drawable.action_drawer
mit
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
Dies wird kompiliert, stürzt aber zur Laufzeit mit ab
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)
Beachten Sie, dass dies android-support-v7-appcompat.jar
in Projektabhängigkeiten korrekt hinzugefügt wird
android
android-support-library
AndreaF
quelle
quelle
Antworten:
Das Hinzufügen nur
android-support-v7-appcompat.jar
zu Bibliotheksabhängigkeiten reicht nicht aus. Sie müssen auch das Modul, das Sie in Ihrem SDK unter dem Pfad finden, in Ihr Projekt importieren\android-sdk\extras\android\support\v7\appcompat
und anschließend Modulabhängigkeiten hinzufügen, um die Projektstruktur auf diese Weise zu konfigurierenAndernfalls sind nur die Klassendateien der Support-Bibliothek enthalten, und die App kann die anderen Ressourcen, die den Fehler verursachen, nicht laden.
Zusätzlich, wie von reVerse vorgeschlagen, ersetzen Sie dies
mit
quelle
Sie müssen keinen Super-Call von verwenden, für den
ActionBarDrawerToggle
die Symbolleiste erforderlich ist . Dies bedeutet, anstatt den folgenden Konstruktor zu verwenden:Sie sollten dieses verwenden:
Das einzige, was Sie tun müssen, ist, Ihre Gewohnheit zu entfernen
drawable
:Mehr zum "neuen" ActionBarDrawerToggle in den Dokumenten (klicken) .
quelle
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable; at android.support.v7.app.DrawerArrowDrawable.<init>(DrawerArrowDrawable.java:64) at android.support.v7.app.ActionBarDrawerToggle$DrawerArrowDrawableToggle.<init>(ActionBarDrawerToggle.java:469) at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:222) at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:150)
android-support-v7-appcompat.jar
in Ihren Projekteigenschaften -> Java Build Path -> Order and Export überprüft ? Außerdem kann es hilfreich sein, den v7-appcompat nach oben zu verschieben.android-support-v7-appcompat.jar
zu den Projektabhängigkeiten auf die gleiche Weise wie support-v4 hinzugefügt (sonst wird nicht einmal kompiliert)compile "com.android.support:appcompat-v7:21.0.0"
zu Ihrerbuild.gradle
Datei hinzufügen , und schon kann es losgehen.Sie müssen verwenden
import android.support.v7.app.ActionBarDrawerToggle;
und verwenden Sie den Konstruktor
Wenn die Schaltfläche zum Umschalten der Schublade dunkel wird, müssen Sie die in der Support-Bibliothek bereitgestellte supportActionBar verwenden.
Sie können supportActionbar über diesen Link implementieren: http://developer.android.com/training/basics/actionbar/setting-up.html
quelle
import android.support.v7.app.ActionBarDrawerToggle;
hat bei mir funktioniert. Obwohl ich normalerweise Autoimporte habe, hat dieser nicht automatisch importiert.import android.support.v4.app.ActionBarDrawerToggle;
Anstelle von
Sie können verwenden
quelle