Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Extraño error utilizando onCreateView en PreferenceFragment al llamar addPreferencesFromResource de onCreate

Estoy tratando de agregar un ImageView a un fragmento de preferencia con el fin de mostrar una vista previa de una configuración de color. Estoy accediendo a la instancia de la vista de la imagen a través del método onCreateView para poner el color de la prueba, y se mostrará. Sin embargo, sólo funciona si no llamo a addPreferencesFromResource en el método onCreate – que es un problema ya que las preferencias deben agregarse. También si dejo la llamada a addPreferencesFromResource, pero elimine todo el método onCreateView que ejecute el programa (albiet sin la imagen actualizable).

El error en ambos casos es "El contenido tiene vista con el atributo id 'android.R.id.list' que no es una clase ListView"

He intentado tener acceso a la visión de la imagen de onCreate, pero para entonces los artículos de la disposición son inflados y no puedo parecen tener acceso a la instancia real que se exhibe.

Error de 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 

Aquí el PreferenceActivity con el Fragmento en línea:

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

Aquí está la definición de preferencia en 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> 

Aquí está el diseño que contiene la vista de la imagen en 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> 

A pesar del error no estoy usando un ListView o un ListFragment en cualquier parte de mi proyecto. Esto casi parece como un error de Android. Cualquier sugerencia sería apreciada.

3 Solutions collect form web for “Extraño error utilizando onCreateView en PreferenceFragment al llamar addPreferencesFromResource de onCreate”

Cuando crea un layot ​​personalizado para una PreferenceActivity o un PreferenceFragment, debe proporcionar un ListView con id android.R.id.list en el que vaya a Preferencias.

 <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="#aaaaaa" /> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="5dp" /> </LinearLayout> 

Tuve este problema hoy también. Se derivó de usar las tutorías de Android aquí: http://developer.android.com/guide/topics/ui/settings.html#Fragment

Básicamente, encontré que el problema provenía del uso del archivo preferences.xml:

 addPreferencesFromResource(R.xml.preferences); 

Una vez que comenté esto, el error se fue y mi actividad comenzó a mostrarse, aunque despoblada por las preferencias. Intentaré cazar esto y seguir aquí.

Espero que esto ayude hasta ahora! La excepción lanzada no es muy útil.

Tuve el mismo problema, y ​​la solución fue asegurarse de que estaba importando la biblioteca Fragment correcta:

 import android.app.Fragment; 

(No la versión de la biblioteca de soporte)

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.