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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top