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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage