Hier (17-10-2014), j'ai mis à jour le SDK Android et support-library-v4.jar
de mon application, maintenant je reçois un avertissement de désapprobation lié à ActionBarDrawerToggle
, la lecture de la documentation semble que je dois utiliser le ActionBarDrawerToggle
in support-library-v7.appcompact.jar
.
Voici quelques parties de mon activité qui pourraient être pertinentes:
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()
}
}
}
J'ai essayé de copier support-library-v7 et de remplacer
import android.support.v4.app.ActionBarDrawerToggle;
avec
import android.support.v7.app.ActionBarDrawerToggle;
cela a causé un problème de compilation dans
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
J'ai donc essayé de remplacer R.drawable.action_drawer
par
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
cela compile mais plante au Runtime avec
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)
Notez que android-support-v7-appcompat.jar
est correctement ajouté dans les dépendances du projet
android
android-support-library
AndreaF
la source
la source
Réponses:
Ajouter uniquement
android-support-v7-appcompat.jar
aux dépendances de la bibliothèque ne suffit pas, vous devez également importer dans votre projet le module que vous pouvez trouver dans votre SDK au chemin\android-sdk\extras\android\support\v7\appcompat
et ensuite ajouter des dépendances de module en configurant la structure du projet de cette manièresinon, seuls les fichiers de classe de la bibliothèque de support sont inclus et l'application n'est pas en mesure de charger les autres ressources à l'origine de l'erreur.
De plus, comme reVerse suggéré, remplacez
avec
la source
Vous n'avez pas besoin d'utiliser le super-appel du
ActionBarDrawerToggle
qui nécessite la barre d'outils . Cela signifie au lieu d'utiliser le constructeur suivant:Vous devriez utiliser celui-ci:
Donc, fondamentalement, la seule chose à faire est de supprimer votre coutume
drawable
:En savoir plus sur le « nouveau » ActionBarDrawerToggle dans les Docs (clic) .
la source
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
propriétés de votre projet -> Chemin de construction Java -> Trier et exporter? De plus, il peut être utile de déplacer le v7-appcompat vers le haut.android-support-v7-appcompat.jar
dépendances du projet de la même manière que support-v4 (sinon ne compile même pas)compile "com.android.support:appcompat-v7:21.0.0"
à votrebuild.gradle
fichier et vous êtes prêt à partir.Tu dois utiliser
import android.support.v7.app.ActionBarDrawerToggle;
et utilisez le constructeur
et si le bouton bascule du tiroir devient noir, vous devez utiliser le supportActionBar fourni dans la bibliothèque de support.
Vous pouvez implémenter supportActionbar à partir de ce lien: http://developer.android.com/training/basics/actionbar/setting-up.html
la source
import android.support.v7.app.ActionBarDrawerToggle;
fonctionné pour moi. Même si j'ai généralement des importations automatiques, celle-ci n'a pas été importée automatiquement.import android.support.v4.app.ActionBarDrawerToggle;
Au lieu de
Vous pouvez utiliser
la source