2011-02-15 16 views
7

Quiero que la clase a continuación muestre algunas textviews/botones/spinners, y también un ListView que contenga datos analizados. Sin embargo, la lista/adaptador/addview están causando algunos problemas. Aquí está el error que estoy recibiendo:Problemas con AdapterView y addView

java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

Tengo la sensación de su hacer 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 statisticsscreen 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> 

xmllayout 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 un Textview sencilla.

EDIT:

Ok por lo que ive actualizados algunos de los archivos y que estoy recibiendo un error de excepción de ejecución:

Your content must have a ListView whose attribute is '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); 
    }  
} 

My statsscreenlayout stil ha s todos los linearlayouts con textviews etc., y he eliminado este de ella:

<include layout="@layout/xmllayout" android:id="@+id/xmllist" /> 

Entonces mis otros dos diseños son una TextView sencilla (xmldatarow), y una vista de lista (xmllayout). Así que solo para aclarar, no hay ninguna vista de lista o ninguna 'inclusión' en mi statsscreenlayout.

Algún consejo? Gracias

Respuesta

11

No se pueden inflar las vistas directamente en una vista de lista como esa. Creo que puede estar buscando ListView 's addHeaderView o addFooterView métodos. Asegúrese de llamarlos antes de llamar al setListAdapter.

EDIT: Para explicarla plenamente: Suponiendo que quería statsviewlayout en la parte superior de su lista: No ponga el LinearLayout directamente en el elemento ListView (ListViews no debe tener hijos). Ponerlo en un archivo separado XML (por ejemplo, statsview.xml) y hacer algo como esto en su onCreate:

getListView().addHeaderView(View.inflate(this, R.layout.statsview.xml, null)); 

también ver este viejo android-beginners post.

+0

¿Podría ampliar un poco sobre esto, por favor? gracias – mmmbaileys

+0

Sure. Editado en consecuencia. –

+0

Gracias, actualicé mi publicación con una edición allí. ¿Podrías echarle otro vistazo? ¡Muchas gracias! – mmmbaileys

Cuestiones relacionadas