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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top