So ersetzen Sie veraltetes android.support.v4.app.ActionBarDrawerToggle

Lesezeit: 5 Minuten

So ersetzen Sie veraltetes androidsupportv4appActionBarDrawerToggle
AndreaF

Gestern (17.10.2014) habe ich das Android SDK aktualisiert und support-library-v4.jar meiner App erhalte ich jetzt eine Einstellungswarnung in Bezug auf ActionBarDrawerToggle, lesen die Dokumentation anscheinend muss ich das benutzen ActionBarDrawerToggle in 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 ein Kompilierungsproblem verursacht in

 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 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 android-support-v7-appcompat.jar wird in Projektabhängigkeiten korrekt hinzugefügt
Bildbeschreibung hier eingeben

  • Ändern Sie Ihren Import von v4 auf v7 und es hat funktioniert

    – Ahmed

    17. Juni ’15 um 20:05

So ersetzen Sie veraltetes androidsupportv4appActionBarDrawerToggle
Silbersturm

Nur hinzufügen android-support-v7-appcompat.jar zu Bibliotheksabhängigkeiten ist nicht genug, Sie müssen in Ihr Projekt auch das Modul importieren, das Sie in Ihrem SDK unter dem Pfad finden android-sdkextrasandroidsupportv7appcompatund danach Modulabhängigkeiten hinzufügen, um die Projektstruktur auf diese Weise zu konfigurieren

Bildbeschreibung hier eingeben

Andernfalls sind nur die Klassendateien der Supportbibliothek enthalten und die App kann die anderen Ressourcen, die den Fehler verursachen, nicht laden.

Zusätzlich, wie reVerse vorgeschlagen, ersetzen Sie dies

public CustomActionBarDrawerToggle(Activity mActivity,
                                           DrawerLayout mDrawerLayout) {
            super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
                    R.string.ns_menu_open, R.string.ns_menu_close);
        }

mit

public CustomActionBarDrawerToggle(Activity mActivity,
                                           DrawerLayout mDrawerLayout) {
            super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
        }

  • Danke funktioniert! Der Schubladen-Kippschalter wird jedoch dunkel, wie kann die Farbe geändert werden?

    – AndreaF

    18. Okt. ’14 um 14:52

  • Update Drawer wird bei Jelly Bean und früheren Versionen nicht angezeigt

    – AndreaF

    18. Okt. ’14 um 16:37 Uhr

  • siehe stackoverflow.com/questions/26442135/…

    – AndreaF

    18. Okt ’14 um 16:43

Sie müssen den Super-Call des nicht verwenden ActionBarDrawerToggle was erfordert die Symbolleiste. Dies bedeutet, anstatt den folgenden Konstruktor zu verwenden:

ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)

Sie sollten diesen verwenden:

ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)

Sie müssen also im Grunde nur Ihre Gewohnheit entfernen drawable:

super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);

Mehr zum “neuen” ActionBarDrawerToggle in den Dokumenten (klick).

  • Ich habe versucht, Ihrem Vorschlag zu folgen, stürzt jedoch mit diesem Problem ab: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)

    – AndreaF

    18. Okt. ’14 um 13:24

  • Sie verwenden Eclipse richtig? Hast du das überprüft? android-support-v7-appcompat.jar in Ihren Projekteigenschaften –> Java Build Path –> Bestellen und exportieren? Außerdem kann es hilfreich sein, das v7-appcompat nach oben zu verschieben.

    – umkehren

    18. Okt. ’14 um 13:25


  • Ich verwende IntelliJ Ich habe das hinzugefügt android-support-v7-appcompat.jar zu den Projektabhängigkeiten auf die gleiche Weise wie bei support-v4 (sonst kompiliert nicht einmal)

    – AndreaF

    18. Okt. ’14 um 13:28


  • Mhkay leider kenne ich mich mit IntelliJ nicht aus. In Android Studio müssen Sie nur hinzufügen compile "com.android.support:appcompat-v7:21.0.0" zu deinem build.gradle Datei und Sie können loslegen.

    – umkehren

    18. Okt. ’14 um 13:31

  • Ich habe viele Male überprüft, ob die Bibliotheksabhängigkeit richtig konfiguriert ist. Es gibt einen anderen Grund, der das Problem verursacht. Ich habe gedacht, dass die Bibliothek möglicherweise beschädigt ist, aber ich habe versucht, sie vom SDK-Manager herunterzuladen und erneut hinzuzufügen, ohne Ergebnis

    – AndreaF

    18. Okt ’14 um 13:35

1642017190 237 So ersetzen Sie veraltetes androidsupportv4appActionBarDrawerToggle
Abhi1227

Sie müssen verwenden import android.support.v7.app.ActionBarDrawerToggle;

und benutze den Konstruktor

public CustomActionBarDrawerToggle(Activity mActivity,DrawerLayout mDrawerLayout)
{
    super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}

und wenn die Schaltfläche zum Umschalten der Schublade dunkel wird, müssen Sie die in der Supportbibliothek bereitgestellte supportActionBar verwenden.

Sie können supportActionbar über diesen Link implementieren: http://developer.android.com/training/basics/actionbar/setting-up.html

  • Danke, ein manueller Import von import android.support.v7.app.ActionBarDrawerToggle; hat bei mir funktioniert. Obwohl ich normalerweise Auto-Importe habe, hat dieser nicht automatisch importiert.

    – Azurfleck

    20. Januar ’15 um 5:33

  • Und löschen import android.support.v4.app.ActionBarDrawerToggle;

    – VikingGlen

    17. November ’15 um 5:16


Anstelle von

drawer.setDrawerListener(toggle);

Sie können verwenden

drawer.addDrawerListener(toggle);

.

475550cookie-checkSo ersetzen Sie veraltetes android.support.v4.app.ActionBarDrawerToggle

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy