Problemas con AdapterView y addView
-
14-11-2019 - |
Pregunta
Quiero que la siguiente clase muestre algunas vistas de texto/botones/hiladores, y también un ListView que contenga datos analizados.Sin embargo, la vista de lista/adaptador/addview está causando algunos problemas.Aquí está el error que recibo:
java.lang.UnsupportedOperationException:addView(View, LayoutParams) no es compatible con AdapterView
Tengo la sensación de que tiene que ver con mis archivos xml, pero no estoy muy seguro.Aquí está mi código:
public class StatisticsScreen extends ListActivity{
private List<Message> messages;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.statisticsscreen);
loadFeed();
//other textviews and listeners added
}
private void loadFeed() {
try{
BaseFeedParser parser = new BaseFeedParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages){
titles.add(msg.getTitle());
}
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, R.layout.xmldatarow,titles);
this.setListAdapter(adapter);
} catch (Throwable t){
Log.e("AndroidNews",t.getMessage(),t);
}
}
Mi pantalla de estadísticas xml:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/statsviewlayout"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/black">
//other layouts/textviews/buttons added
<include layout="@layout/xmllayout" android:id="@+id/xmllist" />
</LinearLayout>
</ListView>
xmldiseño xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView android:id="@+id/xmllist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
xmldatarow es una vista de texto simple.
EDITAR:
Ok, he actualizado algunos de los archivos y aparece un error de excepción de tiempo de ejecución:
Tu contenido debe tener un ListView cuyo atributo sea 'android.R.id.list'
Aquí están los archivos actualizados:
clase:
setContentView(R.layout.statisticsscreen);
loadFeed();
getListView().addHeaderView(View.inflate(this, R.layout.xmllayout, null));
private void loadFeed() {
try{
BaseFeedParser parser = new BaseFeedParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages){
titles.add(msg.getDate());
}
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, R.layout.xmldatarow,titles);
this.setListAdapter(adapter);
} catch (Throwable t){
Log.e("AndroidNews",t.getMessage(),t);
}
}
Mi diseño de pantalla de estadísticas todavía tiene todos los diseños lineales con vistas de texto, etc.y eliminé esto:
<include layout="@layout/xmllayout" android:id="@+id/xmllist" />
Entonces mis otros dos diseños son una vista de texto simple (xmldatarow) y una vista de lista (xmllayout).Entonces, solo para aclarar, no hay ninguna vista de lista ni ninguna "inclusión" en mi diseño de pantalla de estadísticas.
¿Algún consejo?Gracias
Solución
No puedes inflar vistas directamente en una vista de lista como esa.Creo que puedes estar buscando ListView
's addHeaderView
o addFooterView
métodos.Asegúrate de llamarlos antes de llamar. setListAdapter
.
EDITAR:Para explicarlo completamente:Suponiendo que quisieras statsviewlayout
en la parte superior de tu lista:No pongas el LinearLayout
directamente en el ListView
elemento (ListViews
no debería tener hijos).Ponlo en un separado archivo xml (por ejemplo, statsview.xml
) y haz algo como esto en tu onCreate:
getListView().addHeaderView(View.inflate(this, R.layout.statsview.xml, null));
Vea también este viejo publicación para principiantes de Android.