Вопрос

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

XML-макет 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 — это простой textView.

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

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

Ваш контент должен иметь 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).Просто чтобы уточнить: в моем statsscreenlayout нет никакого списка или каких-либо «включений».

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top