Kullanımdan kaldırılmış android.support.v4.app.ActionBarDrawerToggle nasıl değiştirilir


127

Dün (17-10-2014) Ben güncelleme Android SDK ve support-library-v4.jarbenim App, şimdi ilgili kullanımdan kaldırılması uyarısı alıyorum ActionBarDrawerToggle, okuma belgeleri ı kullanmak zorunda gibi görünüyor ActionBarDrawerToggleiçinde support-library-v7.appcompact.jar.

İşte Faaliyetimin alakalı olabilecek bazı bölümleri:

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'yi kopyalayıp değiştirmeyi denedim

import android.support.v4.app.ActionBarDrawerToggle;

ile

 import android.support.v7.app.ActionBarDrawerToggle;

bu, derleme sorununa neden oldu

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

Ben yerine çalıştık Yani R.drawable.action_drawerbirlikte

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

bu derlenir ancak Runtime'da çökme

 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.jarProje bağımlılıklarına doğru şekilde eklendiğini unutmayıngörüntü açıklamasını buraya girin


1
İçe aktarma işleminizi v4'ten v7'ye değiştirin ve işe yaradı
Ahmed

Yanıtlar:


66

Sadece android-support-v7-appcompat.jarkütüphane bağımlılıklarına eklemek yeterli değildir, SDK'nızda bulabileceğiniz modülü de projenize içe aktarmanız \android-sdk\extras\android\support\v7\appcompatve daha sonra proje yapısını bu şekilde yapılandırarak modül bağımlılıkları eklemeniz gerekir.

görüntü açıklamasını buraya girin

aksi takdirde yalnızca destek kitaplığının sınıf dosyaları dahil edilir ve uygulama, hataya neden olan diğer kaynakları yükleyemez.

Ek olarak, reVerse'nin önerdiği gibi bunu değiştirin

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

ile

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

Teşekkürler çalışır! Ancak çekmece geçiş düğmesi kararır, rengi nasıl değiştirebilirim?
AndreaF



60

Araç ÇubuğunuActionBarDrawerToggle gerektiren süper çağrıyı kullanmanıza gerek yoktur . Bu, aşağıdaki yapıcıyı kullanmak yerine anlamına gelir:

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

Bunu kullanmalısın:

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

Yani temelde yapmanız gereken tek şey özelliğinizi kaldırmaktır drawable:

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

Dokümanlar'daki "yeni" ActionBarDrawerToggle hakkında daha fazla bilgi (tıklayın) .


Önerinizi izlemeye çalıştım ancak şu sorunla karşılaşıyorum: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'14

Eclipse kullanıyorsunuz değil mi? android-support-v7-appcompat.jarProje özelliklerinizde -> Java Derleme Yolu -> Sipariş Et ve Dışa Aktar'ı kontrol ettiniz mi? Ayrıca, v7-appcompat'ı en üste taşımak faydalı olabilir.
2014

IntelliJ kullanıyorum android-support-v7-appcompat.jarProje bağımlılıklarına support-v4 ile aynı şekilde ekledim (aksi takdirde derleme bile
yapmaz

1
Mhkay maalesef IntelliJ'e aşina değilim. Android Studio'da sadece eklemeniz gerekir compile "com.android.support:appcompat-v7:21.0.0"sizin için build.gradledosya ve sen iyi gitmek.
2014

Kütüphane bağımlılığının doğru bir şekilde yapılandırılıp yapılandırılmadığını defalarca kontrol ettim, soruna neden olan başka bir sebep var, kütüphanenin bozuk olabileceğini düşündüm ancak SDK yöneticisinden
sonuçsuz indirip

27

kullanmalısın import android.support.v7.app.ActionBarDrawerToggle;

ve yapıcıyı kullanın

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

ve çekmece geçiş düğmesi kararırsa, destek kitaplığında sağlanan supportActionBar'ı kullanmanız gerekir.

SupportActionbar'ı bu bağlantıdan uygulayabilirsiniz: http://developer.android.com/training/basics/actionbar/setting-up.html


Teşekkürler, manuel olarak içe aktarma import android.support.v7.app.ActionBarDrawerToggle;benim için çalıştı. Genellikle otomatik içe aktarmalarım olmasına rağmen, bu otomatik olarak içe aktarılmadı.
Azurespot

Ve silimport android.support.v4.app.ActionBarDrawerToggle;
VikingGlen

8

Yüklü

drawer.setDrawerListener(toggle);

Kullanabilirsiniz

drawer.addDrawerListener(toggle);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.