Android support library 23.4.0: android.Unterstützung.v7.- widget.TintContextWrapper nicht geworfen wird, um zu Aktivität

Also habe ich aktualisiert, um die neuesten support-Bibliotheken, und bekam einen crash-ich bin nicht in der Lage, zu beheben. Meine bauen.gradle hat nun diese Abhängigkeiten:

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...
}

Hatte ich eine funktionierende Zuhörer, die verwendet wird, zu fangen Klicks und starten Sie eine neue Aktivität. Das war in Ordnung, die in support-Bibliotheken v. 23.1.0, aber nicht in 23.4.0 (und 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);
    }
}

Dieser listener wird einfach an eine ImageButton und danach die Farbe der Schaltfläche eingefärbt ist, wie dieser:

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

wo Tinting.tint() ist meine eigene Tönung-Funktion:

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;
    }
}

Zuvor wenn ich klickte die Schaltfläche funktioniert alles wie erwartet, aber jetzt ist der Zusammenhang der Ansicht scheint sich verändert zu haben, um TintContextWrapper die finde ich wenig Informationen darüber. Ich fand dieses Problem, aber die Projekt-Mitarbeiter berät hier Fragen auf StackOverflow, so ist es hier.

Was habe ich versucht?

Seit Beginn des Projekts Mitglied in der Google-Problem angegeben benötigen Sie die Aktivität von umschlossenen Kontext. Ich habe versucht, casting, um TintContextWrapper statt MyActivity, welche gut funktioniert, aber ich kann nicht herausfinden, wie man MyActivity aus TintContextWrapper.

Also meine Fragen sind:

  1. Wie bekomme ich MyActivity von der TintContextWrapper?
  2. Warum ist mein ImageButton plötzlich eingehüllt in ein TintContextWrapper.
  3. Sollte dieses Verhalten wirklich erwartet?

Definition von ImageButton in xml ist einfach:

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

Stack trace:

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)
  • Protokolle zeigen MyItemOnClickListener . Wo ist es ?
  • Sorry, es war ein Fehler auf meiner Seite, ich update den stack-trace. Der crash ist in IngredientItemOnClickListener die verbunden ist, in Frage.
Schreibe einen Kommentar