Merkwürdiger Fehler bei der Verwendung von onCreateView in PreferenceFragment beim Aufrufen von addPreferencesFromResource von onCreate
Ich versuche, einem Präferenzfragment eine ImageView hinzuzufügen, um eine Vorschau einer Farbeinstellung anzuzeigen. Ich greife über die onCreateView-Methode auf die Instanz der Bildansicht zu, um die Testfarbe festzulegen, und sie wird angezeigt. Es funktioniert jedoch nur, wenn ich addPreferencesFromResource in der onCreate-Methode nicht aufrufe. Dies ist ein Problem, da die Voreinstellungen hinzugefügt werden müssen. Auch wenn ich den Aufruf von addPreferencesFromResource überlasse, aber die gesamte onCreateView-Methode entferne, wird das Programm ausgeführt (albiet ohne die aktualisierbare Bildansicht).
In beiden Fällen lautet der Fehler "Inhalt hat Ansicht mit dem ID-Attribut" android.R.id.list ", das keine ListView-Klasse ist".
Ich habe versucht, von onCreate auf die Bildansicht zuzugreifen, aber bis dahin sind die Layoutelemente aufgeblasen, und ich kann anscheinend nicht auf die tatsächlich angezeigte Instanz zugreifen.
Fehler von LogCat:
04-11 00:42:43.619: E/AndroidRuntime(5362): FATAL EXCEPTION: main
04-11 00:42:43.619: E/AndroidRuntime(5362): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.signalwidget/com.example.android.signalwidget.SignalWidgetConfigure}: java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class
Hier die PreferenceActivity mit Inline-Fragment:
public class SigConfigure extends PreferenceActivity {
private static int prefs=R.xml.pref_widget_colors;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getFragmentManager().beginTransaction().replace(android.R.id.content, new ColorsFragment()).commit();
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
}
public static class ColorsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(SignalWidgetConfigure.prefs);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
//just testing to see if the imageview can be accessed.
View v = inflater.inflate(R.layout.layout_pref_row, container, false);
ImageView iv = (ImageView) v.findViewById(R.id.color_preview);
iv.setBackgroundColor(Color.CYAN);
return v;
}
}}
Hier ist die Präferenzdefinition in pref_widget_colors
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
android:key="wifi_signal_color"
android:title="WiFi Signal Color" >
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.example.android.signalwidget.colorpicker.PickerActivity"
android:targetPackage="com.example.android.signalwidget" />
</Preference>
<Preference
android:key="cell_signal_color"
android:title="Cell Signal Color" >
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.example.android.signalwidget.colorpicker.PickerActivity"
android:targetPackage="com.example.android.signalwidget" />
</Preference>
</PreferenceScreen>
Hier ist das Layout mit der Bildansicht in layout_pref_row.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/color_preview"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="5dp"
android:background="#aaa" />
</LinearLayout>
Trotz des Fehlers verwende ich nirgendwo in meinem Projekt eine ListView oder ein ListFragment. Dies scheint fast wie ein Android-Bug. Jeder Vorschlag wäre dankbar.