Форум программистов, компьютерный форум, киберфорум
Наши страницы
Xamarin
Войти
Регистрация
Восстановить пароль
 
REatar
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 27
1

Кастомный адаптер: ошибка IllegalStateException

05.06.2018, 21:17. Просмотров 370. Ответов 3
Метки нет (Все метки)

Имеется код со своим адаптером для ListView
C#
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
public class ChatConversationsAdapter : BaseAdapter
    {
        private Activity _activity;
        private List<ChatConversation> _list;
        private LayoutInflater _inflater;
 
        public ChatConversationsAdapter(Activity activity, List<ChatConversation> list)
        {
            _activity = activity;
            _list = list;
                
            if (_inflater == null)
            {
                _inflater = (LayoutInflater)_activity.GetSystemService(Context.LayoutInflaterService);
            }
        }
 
        public override int Count => _list.Count;
 
        public override Java.Lang.Object GetItem(int position)
        {
            return _list.ElementAt(position);
        }
 
        public override long GetItemId(int position)
        {
            return position;
        }
 
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var view = convertView;
            if (view == null)
            {
                view = _inflater.Inflate(FirebaseChat.Resource.Layout.ConversationsListView, parent, false);
            }
 
            TextView txtUserName = view.FindViewById<TextView>(FirebaseChat.Resource.Id.text_conv_user_name);
            TextView txtUserMessage = view.FindViewById<TextView>(FirebaseChat.Resource.Id.text_conv_user_message);
 
            if (_list.Count > 0)
            {
                var item = _list.ElementAt(position);
 
                if (item.Name == null)
                {
                    txtUserName.Text = item.FromNameMessage;
                }
                else
                {
                    txtUserName.Text = item.Name;
                }
 
                txtUserMessage.Text = item.TextMessage;
 
                            this.NotifyDataSetChanged();
            }
 
            return view;
        }
 
        public override void NotifyDataSetChanged()
        {
            _activity.RunOnUiThread(new Action(() => {
                base.NotifyDataSetChanged();
            }));
        }
Дело в том что, когда я перехожу с activity, где расположен данный адаптер на другую activity и так пару раз, то вылетает ошибка 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.
Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131361947, class android.support.
v7.widget.ListViewCompat) with Adapter(class md58789a44e604b7fa4648502c8c7c7f7f5.ChatConversationsAdapter)]
Может кто-нибудь сталкивался с данной проблемой?
Пробовал обновление listview в UI поток засовывать, но ничего не менялось
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2018, 21:17
Ответы с готовыми решениями:

ListView и кастомный адаптер
Добрый день ув. Программисты! Нашёл код который заполняет ListView с кастомным адаптером. Но вот...

Кастомный адаптер listView
Доброго времени суток, в общем впервые столкнулся с задачей создания кастомного адаптера для...

Не работает кастомный адаптер
Делаю программу с собственным адаптером для ListView. Компилятор ни на что не ругается, но...

Несколько string массивов в кастомный адаптер
Есть ListView с кастомным адаптером в отдельном классе. Нашел код на просторах как передавать в...

IllegalStateException media player
Делаю проигрователь. Запускаю, выбираю песню. Играет,все ок. Но потом нажимаю назад и выхожу из...

3
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,118
06.06.2018, 07:24 2
REatar, вы меняете данные которые отображаются через адаптер не уведомляя его при помощи вызова notifyDataSetChanged
0
REatar
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 27
06.06.2018, 08:17  [ТС] 3
В коде я вызываю этот адаптер так
C#
1
2
3
4
5
6
7
8
9
10
RunOnUiThread(() =>
                {
                    var adapter = new ChatConversationsAdapter(this, _dataConversations);
 
                    
                    adapter.NotifyDataSetChanged();
 
                    _lstConversations.Adapter = adapter;
                    _lstConversations.DeferNotifyDataSetChanged();
                });
0
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,118
06.06.2018, 13:36 4
REatar, подозреваю что где-то после создания и назначения адаптера вы меняете dataConversations
0
06.06.2018, 13:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2018, 13:36

JSON Parser IllegalStateException
package recordingBook.ExtendedIO.IE; import com.google.gson.stream.JsonReader; import...

Java.lang.IllegalStateException
Добрый вечер При компиляции возникает ошибка java.lang.IllegalStateException public class...

Адаптер ListView - ошибка
MainActivity.java: ... @Override public void onCreate(Bundle savedInstanceState) {...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru