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

Я хочу, чтобы класс ниже отображал некоторые текстовые представления/кнопки/спиннеры, а также 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».

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

класс:

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" />

Тогда мои другие два макета — это простое текстовое представление (xmldatarow) и список (xmllayout). Итак, просто чтобы уточнить, в моем макете экрана статистики нет никакого списка или какого-либо «включения».

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


person mmmbaileys    schedule 15.02.2011    source источник


Ответы (1)


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

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

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

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

person Yoni Samlan    schedule 15.02.2011
comment
Спасибо, я обновил свой пост с правкой там. Не могли бы вы еще раз взглянуть? Большое спасибо! - person mmmbaileys; 16.02.2011