Probleme mit AdapterView und addView
-
14-11-2019 - |
Frage
Ich möchte, dass die folgende Klasse einige Textansichten/Schaltflächen/Spinner sowie eine ListView mit analysierten Daten anzeigt.Allerdings verursachen Listview/Adapter/Addview einige Probleme.Hier ist der Fehler, den ich erhalte:
java.lang.UnsupportedOperationException:addView(View, LayoutParams) wird in AdapterView nicht unterstützt
Ich habe das Gefühl, dass es mit meinen XML-Dateien zusammenhängt, bin mir aber nicht ganz sicher.Hier ist mein Code:
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);
}
}
Mein Statistikbildschirm-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 ist eine einfache Textansicht.
BEARBEITEN:
Ok, ich habe einige der Dateien aktualisiert und erhalte eine Laufzeitausnahmefehlermeldung:
Ihr Inhalt muss über eine ListView verfügen, deren Attribut „android.R.id.list“ ist.
Hier sind die aktualisierten Dateien:
Klasse:
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);
}
}
Mein Statistikbildschirmlayout-Stil verfügt über alle linearen Layouts mit Textansichten usw.und das habe ich daraus gelöscht:
<include layout="@layout/xmllayout" android:id="@+id/xmllist" />
Dann sind meine anderen beiden Layouts eine einfache Textansicht (xmldatarow) und eine Listenansicht (xmllayout).Um es klarzustellen: In meinem Statistikbildschirmlayout gibt es weder eine Listenansicht noch ein „Einschließen“.
Irgendein Rat?Danke
Lösung
Sie können Ansichten nicht direkt in eine solche Listenansicht überführen.Ich denke, Sie suchen vielleicht ListView
'S addHeaderView
oder addFooterView
Methoden.Rufen Sie unbedingt dort an, bevor Sie anrufen setListAdapter
.
BEARBEITEN:Um es vollständig auszudrücken:Vorausgesetzt, Sie wollten statsviewlayout
ganz oben auf Ihrer Liste:Setzen Sie das nicht LinearLayout
direkt im ListView
Element (ListViews
sollte keine Kinder haben).Legen Sie es in ein separate xml-Datei (z. B. statsview.xml
) und machen Sie so etwas in Ihrem onCreate:
getListView().addHeaderView(View.inflate(this, R.layout.statsview.xml, null));
Siehe auch dieses alte Beitrag für Android-Anfänger.