Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как настроить текстуры http://www.cyberforum.ru/android-dev/thread766359.html
Есть текстура, нужно сделать повторящиеся текстуры для проги(по горизонтали и вертикали как в html,css). Буду рад!
Программирование Android Как создать android проект в IntelliJ IDEA 12 Подскажите пожалуйста!!! При создании проекта android я нажимаю напротив project sdk на new и выбираю папку с android sdk после чего нажимаю OK но выскакивает ошибка No Java SDK of appropriate... http://www.cyberforum.ru/android-dev/thread766081.html
Как обновить приложение в play.google.com? Программирование Android
Вопрос касается https://play.google.com Пробую обновить приложение, которое я загрузил вчера. Система выдает вот такое сообщение: Сбой при загрузке APK-файл с кодом версии 1 уже...
Программирование Android Как менять иконку при startforeground?
Написал сервис, который постоянно в цикле шлет уведомления в виде новой иконки. Но при нехватке памяти система грохает такой процесс, что плохо. Нужно использовать startForeground. Затык в том, что...
Программирование Android Разработка клавиатуры http://www.cyberforum.ru/android-dev/thread764985.html
Здравствуйте. Решил попробовать себя в качестве разработчика под Android. Опыт у меня скудный (hello world и рандомизатор), но я привык изучать всё "в бою". Вот появилось желание написать клавиатуру...
Программирование Android Динамическое создание и заполнение ViewPager Как во всех читалках реализован перенос текста? Как мне динамически создать WebView и на него вывести текст с переносом на следующую страницу когда закачивается текущее? Как это реализовано в Foliant... подробнее

Показать сообщение отдельно
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598

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

20.01.2013, 04:20. Просмотров 922. Ответов 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(ListView.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(View.java:7127)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2170)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1905)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1925)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.policy.impl.PhoneWindow.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.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1873)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.View.dispatchPointerEvent(View.java:7307)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3174)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3119)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4155)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4134)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4226)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.os.MessageQueue.nativePollOnce(Native Method)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at android.os.MessageQueue.next(MessageQueue.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(ActivityThread.java:4745)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at java.lang.reflect.Method.invokeNative(Native Method)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at java.lang.reflect.Method.invoke(Method.java:511)
01-20 02:27:37.522: E/MessageQueue-JNI(1253): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru