Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606

При клики в BaseAdapter меняется массив строк, как пересоздать ListView с новым массивом?

20.01.2013, 04:20. Показов 1529. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Имеется класс:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package ru.contedevel.mathworker;
 
import java.util.ArrayList;
import ru.contedevel.mathworker.libs.Tree;
import ru.contedevel.mathworker.libs.TreeBuilder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
public class TreeAdapter extends BaseAdapter implements OnItemClickListener {
    //Context
    Context ctx;
    //Inflater
    LayoutInflater inflater;
    //Tree
    private Tree tree;
    //String arrays
    private ArrayList<String> list;
    
    //Constructor
    public TreeAdapter(Context context, String str) {
        ctx = context;
        inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        
        TreeBuilder tb = new TreeBuilder(str);
        tree = tb.getTree();
        
        //Initialization of list
        list = new ArrayList<String> ();
        list.add("<---");
        //Create the highest array
        if(!tree.isEmpty()) {
            for(int i = 0; i < tree.getChildren().size(); i++) {
                list.add(tree.getChildById(i).str);
            }
        }
    }
 
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
 
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View view = convertView;
        if(view == null) {
            view = inflater.inflate(R.layout.tester_list_item, parent, false);
        }
        
        TextView tv = (TextView) view.findViewById(R.id.item);
        tv.setText(list.get(position));
        return view;
    }
 
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
        // TODO Auto-generated method stub
        Tree tmp = this.tree;
        if(position == 0) {
            tmp = tmp.getParent();
        }
        else {
            tmp = this.tree.getChildById(position - 1);
        }
        list.clear();
        list.add("<---");
        //Create the highest array
        if(!tmp.isEmpty()) {
            for(int i = 0; i < tmp.getChildren().size(); i++) {
                list.add(tmp.getChildById(i).str);
            }
        }
    }
    
}

При клики в BaseAdapter меняется массив строк, как пересоздать ListView с новым массивом строк? То есть с новыми элементами из моего дерева...

Это код выдает ошибки:
Кликните здесь для просмотра всего текста
01-20 02:27:37.472: E/InputEventReceiver(1253): Exception dispatching input event.
01-20 02:27:37.472: E/MessageQueue-JNI(1253): Exception in MessageQueue callback: handleReceiveCallback
01-20 02:27:37.522: E/MessageQueue-JNI(1253): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131296261, class android.widget.ListView) with Adapter(class ru.contedevel.mathworker.TreeAdapter)]
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.widget.ListView.layoutChildren(L istView.java:1538)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.widget.AbsListView.onTouchEvent( AbsListView.java:3513)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.View.dispatchTouchEvent(Vie w.java:7127)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransform edTouchEvent(ViewGroup.java:2170)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEven t(ViewGroup.java:1905)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransform edTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEven t(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransform edTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEven t(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransform edTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEven t(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransform edTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEven t(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.policy.impl.PhoneWi ndow$DecorView.superDispatchTouchEvent(P honeWindow.java:1925)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.policy.impl.PhoneWi ndow.superDispatchTouchEvent(PhoneWindow .java:1379)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.app.Activity.dispatchTouchEvent( Activity.java:2396)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.policy.impl.PhoneWi ndow$DecorView.dispatchTouchEvent(PhoneW indow.java:1873)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.View.dispatchPointerEvent(V iew.java:7307)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.deliverPointer Event(ViewRootImpl.java:3174)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.deliverInputEv ent(ViewRootImpl.java:3119)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.doProcessInput Events(ViewRootImpl.java:4155)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.enqueueInputEv ent(ViewRootImpl.java:4134)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl$WindowInputEve ntReceiver.onInputEvent(ViewRootImpl.jav a:4226)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.InputEventReceiver.dispatch InputEvent(InputEventReceiver.java:171)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.os.MessageQueue.nativePollOnce(N ative Method)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.os.MessageQueue.next(MessageQueu e.java:125)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.os.Looper.loop(Looper.java:124)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.app.ActivityThread.main(Activity Thread.java:4745)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at java.lang.reflect.Method.invokeNative(Na tive Method)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at java.lang.reflect.Method.invoke(Method.j ava:511)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:786)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:553)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at dalvik.system.NativeStart.main(Native Method)


Я так понял, что ListView продолжает использовать старый массив, но исправить это не получается....Пытался обновить - то же самое... Как это правильно сделать или правильно пересоздать item-ы? Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2013, 04:20
Ответы с готовыми решениями:

Как пересоздать (изменить размер) двумерный массив при вызове, например, функции
Как пересоздать (изменить размер) двумерный массив при вызове, например, функции? Создаю так: ... private int FoxField; ... ...

Как обрабатывать клики на элементы списка ListView?
товарищи, очень нужна помощь, как обработать нажатие левой и правой кнопки мыши на элемент списка в ListView в WPF есть элемент ListView...

Добавить в ресурсы массив строк и связать его с массивом строк формы
Есть начальный список из 100 SmallString-строк, содержащих пробелы и массив строк String s; Всего один раз при первой загрузке этот...

4
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.01.2013, 04:52
adapter.notifyDataSetChanged()
1
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
20.01.2013, 04:57  [ТС]
Цитата Сообщение от V0v1k Посмотреть сообщение
adapter.notifyDataSetChanged()
Простите за нубский вопрос, но где вызывать это метод? В адаптере в событии onItemClickListener?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.01.2013, 05:00
да.
1
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
20.01.2013, 05:09  [ТС]
Спасибо) Все работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2013, 05:09
Помогаю со студенческими работами здесь

Работа с новым массивом
Задача: Сформировать массив, в котором будут только элементы исходного массива, оканчивающиеся на цифру К. Помогите пожалуйста...

Пересоздать массив
Добрый вечер, интересует вопрос как пересоздать массив, приведу пример: bool vstr=0; char...

Как заполнить ListView массивом сообщений из AynkTask?
как listview правильно заполнить массивом сообщений из AynkTask??

Массив Обджектов инициализировать массивом строк
Я понимаю, что занимаюсь ерундой. Но насколько я понимаю. Object в java супер тип для всех непримитивных типов. Посредством него...

Как клики по компоненту записать в массив в виде координат точек
Пытаюсь написать форму, но у меня никак не получается вот такой момент. В дерективе &quot;public partial class Form1 : Form&quot; я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru