Comment remplacer obsolète android.support.v4.app.ActionBarDrawerToggle

? AndreaF @ | Original: StackOverFlow

Hier (17-10-2014) Je ai mise à jour Android SDK et support-library-v4.jar de mon appli, maintenant je me avertissement de dépréciation similaires à ActionBarDrawerToggle, la lecture https://developer.android.com/reference/android/support/v4 /app/ActionBarDrawerToggle.html semble que je dois utiliser le «____ » dans «____» .

Voici quelques parties de mon activité qui pourrait être relevants :

ActionBarDrawerToggle

Je ai essayé de copier un soutien - bibliothèque - v7 et remplacer

support-library-v7.appcompact.jar

with

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()
        }
    }

}

ce qui a causé problème de compilation

import android.support.v4.app.ActionBarDrawerToggle;

Donc, je ai essayé de remplacer import android.support.v7.app.ActionBarDrawerToggle; avec

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

cette compile, mais chute à Runtime

R.drawable.action_drawer

Notez que public CustomActionBarDrawerToggle(Activity mActivity, DrawerLayout mDrawerLayout) { super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) , R.string.ns_menu_open, R.string.ns_menu_close); } est correctement ajouté en dépendances de projet  Comment remplacer obsolète android.support.v4.app.ActionBarDrawerToggle



Top 5 Respuesta

1reVerse @

Il ne est pas nécessaire pour vous d'utiliser super- appel de la «____» qui nécessite l' http://developer.android.com/reference/android/support/v7/widget/Toolbar.html . Cela signifie au lieu d'utiliser le constructeur suivant :

 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)

Vous devez utiliser celui-ci:

android-support-v7-appcompat.jar

Donc, fondamentalement, la seule chose que vous avez à faire est de supprimer votre coutume ActionBarDrawerToggle :

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

En savoir plus sur la «nouvelle» ActionBarDrawerToggle http://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html .



2Silverstorm @

Ajoutant seulement ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes) de dépendances de bibliothèque ne est pas suffisant, vous devez également importer dans votre projet le module que vous pouvez trouver dans votre kit de développement au chemin drawable et après cela ajouter des dépendances de module la configuration de la structure du projet de cette manière

Comment remplacer obsolète android.support.v4.app.ActionBarDrawerToggle

autrement, sont inclus uniquement les fichiers de classe de bibliothèque de soutien et l'application ne est pas en mesure de charger les autres ressources origine de l'erreur .

En outre suggéré que inverse remplacer cette

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

with

android-support-v7-appcompat.jar
3Abhi1227 @

vous devez utiliser android-sdkextrasandroidsupportv7appcompat

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

et si le bouton à bascule tiroir devient sombre alors vous devez utiliser le supportActionBar fourni dans la bibliothèque de support .

Vous pouvez mettre en œuvre supportActionbar partir de ce lien : http://developer.android.com/training/basics/actionbar/setting-up.html