Android support library 23.4.0: android.de soutien.v7.widget de.TintContextWrapper ne peut pas être lancé à l'Activité

J'ai donc mis à jour pour la dernière bibliothèques de prise en charge, et a obtenu un crash je ne suis pas en mesure de corriger. Mon build.gradle maintenant a ces dépendances:

dependencies {
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:gridlayout-v7:23.4.0'
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.android.support:cardview-v7:23.4.0'
    compile 'com.android.support:recyclerview-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    //More stuff...
}

J'ai eu un travail de l'auditeur qui est utilisé pour intercepter les clics et commencez une nouvelle Activité. Cela fonctionnait bien dans les bibliothèques de prise en charge v. 23.1.0, mais pas dans 23.4.0 (et 23.3.0):

public class IngredientItemOnClickListener implements OnClickListener
{
    private Ingredient mIngredient;

    public IngredientItemOnClickListener(Ingredient ingredient)
    {
        mIngredient= ingredient;
    }

    @Override
    public void onClick(View view)
    {
        MyActivity myActivity = (MyActivity) view.getContext(); //<-- crash here
        myActivity.showIngredientActivity(mIngredient);
    }
}

Cet écouteur est simplement attaché à un ImageButton et, par la suite, la couleur du Bouton est teinté, comme ceci:

Ingredient ingredient = getIngredient();
myImageButton.setOnClickListener(new IngredientItemOnClickListener(ingredient));
Drawable drawable = Tinting.tint(myActivity, R.drawable.my_icon, R.color.red);
myImageButton.setImageDrawable(drawable);

Tinting.tint() est mon propre teinte de la fonction:

public class Tinting
{
    @Nullable
    public static Drawable tint(Context context, int drawableId, int colorId)
    {
        final Drawable drawable = ContextCompat.getDrawable(context, drawableId);
        if (drawable != null)
        {
            final Drawable wrapped = DrawableCompat.wrap(drawable);
            drawable.mutate();
            DrawableCompat.setTint(wrapped, ContextCompat.getColor(context, colorId));
        }
        return drawable;
    }
}

Précédemment lorsque j'ai cliqué sur le bouton tout a fonctionné comme prévu, mais aujourd'hui le Contexte du point de Vue semble avoir changé de TintContextWrapper qui je trouve peu d'informations sur. J'ai trouvé ce problème, mais le projet de membre conseille de demander ici sur StackOverflow, si elle est ici.

Qu'ai-je essayé?

Depuis le projet de membre dans le Google question Vous aurez besoin d'obtenir l'activité de la enveloppé contexte. J'ai essayé de casting pour TintContextWrapper au lieu de MyActivity, qui fonctionne très bien, mais je ne peux pas comprendre comment obtenir MyActivity de TintContextWrapper.

Donc mes questions sont:

  1. Comment puis-je obtenir MyActivity de la TintContextWrapper?
  2. Pourquoi mon ImageButton soudain enveloppé dans un TintContextWrapper.
  3. Si ce comportement vraiment attendre?

Définition de ImageButton en xml est tout simplement:

<ImageButton
    android:id="@+id/my_id"
    android:src="@drawable/my_icon" />

Trace de la pile:

java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cannot be cast to com.my.app.activities.MyActivity
    at com.my.app.listeners.IngredientItemOnClickListener.onClick(IngredientItemOnClickListener.java:21)
    at android.view.View.performClick(View.java:4475)
    at android.view.View$PerformClick.run(View.java:18786)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:176)
    at android.app.ActivityThread.main(ActivityThread.java:5419)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
    at dalvik.system.NativeStart.main(Native Method)
Les journaux représentent MyItemOnClickListener . Où est-il ?
Désolé, il y a une erreur de mon côté, je mets à jour la trace de la pile. Le crash est dans IngredientItemOnClickListener qui est fixé dans la question.

OriginalL'auteur Krøllebølle | 2016-05-12