android.content.res.resources $ NotFoundException beim programmgesteuerten Einstellen von Android.r.attr.ListchoiceIndicatormultiple
-
23-10-2019 - |
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.
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);