android.content.res.resources $ NotFoundException beim programmgesteuerten Einstellen von Android.r.attr.ListchoiceIndicatormultiple

StackOverflow https://stackoverflow.com/questions/4783002

Frage

Ich versuche programmgesteuert das Attribut "Android: Checkmark" auf CheckedTextView -Elementen festzulegen, die ich in einer ListView habe. Beim Ausführen meiner Bewerbung erhalte ich die folgende Ausnahme:

android.content.res.Resources$NotFoundException: Resource ID #0x101021a

Die Ressource mit ID #0x101021a entspricht android.r.attr.ListchoiceIndicatormultiple, was genau der Wert ist, den ich an meine CheckedTextView übergehe:

mCheckedTextView.setCheckMarkDrawable(android.R.attr.listChoiceIndicatorMultiple)

Ist das nicht der Weg, es von Java zu machen? Ich habe versucht (und es gelang es), das gewünschte Verhalten aus dem XML -Layout auszulösen:

<CheckedTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:id="@android:id/text1" />

Die Sache ist, dass ich zur Kompilierung nicht weiß, ob es sein sollte

android:checkMark="?android:attr/listChoiceIndicatorMultiple"

oder

android:checkMark="?android:attr/listChoiceIndicatorSingle"

Daher muss ich diese Werte zur Laufzeit festlegen.

War es hilfreich?

Lösung

Ich würde vermuten, dass programmatisch ein festgelegt wird Attribut Referenz eher als a Drawable Referenz ist das Problem.

In diesem Fall, android.R.attr.listChoiceIndicatorMultiple entspricht android.R.drawable.btn_check, Sie könnten also versuchen, das stattdessen festzulegen.


Oder wenn Sie die Attribute erhalten können, können Sie anrufen getDrawable() auf der TypedArray das dynamisch abrufen Drawable Wert.

Bearbeiten:
Seit dem Wert von listChoiceIndicatorMultiple Hängt vom aktuellen Thema ab. Sie müssen das aktuelle Thema bitten, um die Referenz zu beheben:

int[] attrs = { android.R.attr.listChoiceIndicatorMultiple };
TypedArray ta = getContext().getTheme().obtainStyledAttributes(attrs);
Drawable indicator = ta.getDrawable(0);
view.setCheckMarkDrawable(indicator);
ta.recycle();

Stellen Sie sicher ListView.

Das ist nur ein sehr grundlegendes Beispiel, aber es funktioniert mit dem Standardthema. Ich bin mir nicht ganz sicher, was getan werden muss, um es zu lösen attrs Ganz, wenn Sie ein benutzerdefiniertes Thema haben.

Andere Tipps

Wenn Sie die AppCompat -Bibliothek verwenden, wäre einfacher Alternativen:

setCheckMarkDrawable(android.support.v7.appcompat.R.drawable.abc_btn_check_material);

oder:

setCheckMarkDrawable(android.support.v7.appcompat.R.drawable.abc_btn_radio_material);  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top