как мне динамически добавлять элементы в listview в Android

#java #android

#java #Android

Вопрос:

Кто-нибудь может мне помочь? Я пытаюсь создать ListView в Android, и я пытаюсь загрузить элементы в него, используя код (не используя XML)

Вот код, который у меня есть на данный момент

 tweetList = (ListView)this.findViewById(R.id.tweetListView);
        TextView tv;
        for(int i=0;i<20;i  )
        {
            tv = new TextView(this);
            tv.setText("I'm a textView");
            tweetList.addHeaderView(tv);

        }

        tweetList.invalidate();
  

Что я делаю не так? Элементы не отображаются во время выполнения

РЕДАКТИРОВАТЬ: я изменил код в соответствии с ответами ниже, и вот код, который у меня есть сейчас

  tweetList = (ListView)this.findViewById(R.id.tweetListView);
        ArrayAdapter<TextView> aa = new ArrayAdapter<TextView>(this, R.id.tweetListView);
        tweetList.setAdapter(aa);
        TextView tv;
        for(int i=0;i<20;i  )
        {
            tv = new TextView(this);
            tv.setText("I'm a textView");
            //tweetList.addHeaderView(tv);

            aa.add(tv);

        }

        tweetList.invalidate();
  

Сейчас я получаю исключение

 11-10 01:32:16.002: ERROR/AndroidRuntime(867): android.content.res.Resources$NotFoundException: Resource ID #0x7f050030 type #0x12 is not valid
  

Почему я не могу добавлять их динамически сейчас?

Комментарии:

1. Теперь вы предоставляете поле id в ArrayAdapter, в то время как оно должно быть элементом макета.

Ответ №1:

Вам нужно использовать ArrayAdapter и добавить его в ListView . Затем просто добавляйте элементы в ArrayAdapter динамически.

Например:

 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1);
tweetList.setAdapter(arrayAdapter);
// ...
arrayAdapter.add("New Item");
  

Комментарии:

1. СПАСИБО, ЧУВАК, ты молодец!!!!! У меня была ошибка в объявлении адаптера, после исправления адаптер теперь работает

2. Теперь у меня другая проблема, я пытаюсь добавить TextViews в ListView, возможно ли это вообще, как мы делаем в WPF? теперь все элементы в listview отображаются как ‘android.widget.textview@someID ‘

3. @user974038 попробуйте ArrayAdapter<TextView> вместо ArrayAdapter<String>

4. Что здесь такое «контекст»?? Потому что ‘this’ не работает, потому что это не тип android.content. Контекст

Ответ №2:

Представление заголовка — это просто заголовок, а не элементы в списке. Ваш listview получает свое содержимое через адаптер. ListView Не сохраняет Views для своих дочерних элементов, но это адаптер, который создает их и заполняет соответствующими данными, когда их нужно отобразить на экране. Найдите базовые руководства о том, как это сделать, их там много; и помните, что адаптеры — это ключ.