Проблема с AdapterView и addView - PullRequest
       25

Проблема с AdapterView и addView

7 голосов
/ 16 февраля 2011

Я хочу, чтобы приведенный ниже класс отображал некоторые текстовые представления / кнопки / счетчики, а также ListView, содержащий проанализированные данные.Однако listview / adapter / addview вызывают некоторые проблемы.Вот ошибка, которую я получаю:

java.lang.UnsupportedOperationException: addView (View, LayoutParams) не поддерживается в AdapterView

Я чувствую, что этоделать с моими файлами XML, но я не слишком уверен.Вот мой код:

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

Мой статистический экран 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 - это простой текстовый просмотр.

РЕДАКТИРОВАТЬ:

Хорошо, поэтому я обновил некоторые файлы, и я получаю ошибку исключения во время выполнения:

Ваш контент должен иметь ListView, атрибут которого 'android.R.id.list '

вот обновленные файлы:

class:

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

Мой стиль statsscreenlayout имеет все линейные макеты стекстовые представления и т. д., и я удалил это из него:

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

Тогда мои два других макета - это простое textview (xmldatarow) и listview (xmllayout).Так что, чтобы уточнить, в моем statsscreenlayout нет какого-либо просмотра списка или каких-либо включений.

Любой совет?Спасибо

1 Ответ

11 голосов
/ 16 февраля 2011

Вы не можете раздувать представления напрямую в виде списка. Я думаю, вы можете искать ListView addHeaderView или addFooterView методы. Обязательно позвоните им, прежде чем позвонить setListAdapter.

РЕДАКТИРОВАТЬ: Чтобы объяснить это полностью: при условии, что вы хотели statsviewlayout в верхней части списка: не помещайте LinearLayout непосредственно в элемент ListView (ListViews не должно иметь детей). Поместите его в отдельный XML-файл (скажем, statsview.xml) и сделайте что-то подобное в вашем onCreate:

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

Также смотрите этот старый пост для начинающих Android .

...