Domanda

Voglio che la classe seguente visualizzi alcune visualizzazioni di testo/pulsanti/spinner e anche un ListView contenente dati analizzati.Tuttavia listview/adapter/addview causano alcuni problemi.Ecco l'errore che ricevo:

java.lang.UnsupportedOperationException:addView(View, LayoutParams) non è supportato in AdapterView

Ho la sensazione che abbia a che fare con i miei file xml, ma non ne sono troppo sicuro.Ecco il mio codice:

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

La mia schermata delle statistiche 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>

layout xmlxml:

    <?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 è un semplice textView.

MODIFICARE:

Ok, ho aggiornato alcuni file e ricevo un errore di eccezione di runtime:

Il tuo contenuto deve avere un ListView il cui attributo è "android.R.id.list"

ecco i file aggiornati:

classe:

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

Il mio layout dello schermo delle statistiche ha ancora tutti i layout lineari con visualizzazioni di testo, ecc.e ho cancellato questo da esso:

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

Quindi gli altri miei due layout sono una semplice textview (xmldatarow) e una listview (xmllayout).Quindi, giusto per chiarire, non c'è alcuna visualizzazione elenco o "includi" nel layout della schermata delle statistiche.

Qualche consiglio?Grazie

È stato utile?

Soluzione

Non puoi gonfiare le visualizzazioni direttamente in una visualizzazione elenco in questo modo.Penso che potresti cercare ListView'S addHeaderView O addFooterView metodi.Assicurati di chiamarli prima di chiamare setListAdapter.

MODIFICARE:Per dirlo completamente:Supponendo che tu lo volessi statsviewlayout in cima alla tua lista:Non mettere il LinearLayout direttamente nel ListView elemento (ListViews non dovrebbe avere figli).Mettilo in a separato xml (ad esempio, statsview.xml) e fai qualcosa del genere nel tuo onCreate:

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

Vedi anche questo vecchio post per principianti Android.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top