Problemi con AdapterView e addView
-
14-11-2019 - |
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
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.