Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для mikelll
16 / 16 / 6
Регистрация: 27.12.2010
Сообщений: 163

RecyclerView как правильно добавлять данные

23.01.2018, 21:37. Показов 1320. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть RecyclerView, с таким адаптером
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
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
 
import java.util.List;
 
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<Message> mDataset;
 
    public MyAdapter(List<Message> Dataset) {
        this.mDataset = Dataset;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false);
        return new ViewHolder(v);
    }
    
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int i) {
        final Message record = mDataset.get(i);
        viewHolder.name.setText(String.format("(%d) %s", i+1,record.getMessageText()));
        viewHolder.time.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", record.getMessageTime()));
        if (i % 2 == 0)
            viewHolder.mLinearLayout.setBackgroundColor(Color.WHITE);
        else
            viewHolder.mLinearLayout.setBackgroundColor(Color.rgb(255, 223, 223));
 
        viewHolder.mLinearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Context context = view.getContext();
                Intent intent = new Intent(context, NoteActivity.class);
                intent.putExtra("ID", i);
                intent.putExtra("OLD_MESSAGE", record.getMessageText());
                ((Activity) context).startActivityForResult(intent, 2);
            }
        });
    }
 
    @Override
    public int getItemCount() {
        return mDataset.size();
    }
    
    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView name;
        private TextView time;
 
        private LinearLayout mLinearLayout;
 
        public ViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.message_textView);
            time = (TextView) itemView.findViewById(R.id.time_textView);
            mLinearLayout = (LinearLayout) itemView.findViewById(R.id.linLayout);
        }
    }
 
}
Данные хранятся в MainActivity, как
Java
1
public ArrayList<Message> message_list = new ArrayList<Message>();
При выполнении кода
Java
1
2
3
4
5
mRecyclerView = (RecyclerView) findViewById(R.id.recycler);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new MyAdapter(message_list);
mRecyclerView.setAdapter(mAdapter);
Все хорошо работает.
Вопрос как правильно обновить данные?
Способ
Java
1
2
message_list.add(new Message(message));
mRecyclerView.setAdapter(new MyAdapter(message_list));
Работает, но что-то мне подсказывает, что это не совсем правильною
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2018, 21:37
Ответы с готовыми решениями:

Как добавлять дополнительные данные
Скажите как действовать в данной ситуации Допустим, я заполняю Listview У меня внутри есть картинка и текст. Но так же мне над...

ListView - как добавлять данные из БД в начало списка?
Здравствуйте. Подскажите, пожалуйста, как сделать, чтобы при добавлении данных в БД - в ListView они попадали в начало списка. Использую...

RecyclerView постонно меняются данные и размеры
Добрый день. Использую RecyclerView c cardview. Cardview просто картинка и текст. 1) При открытии фрагмента с RecyclerView все...

2
90 / 89 / 23
Регистрация: 08.07.2014
Сообщений: 548
23.01.2018, 22:27
Что же вы все гугль то игнорируете, первая же ссылка
0
33 / 35 / 9
Регистрация: 03.02.2017
Сообщений: 141
24.01.2018, 00:07
Цитата Сообщение от mikelll Посмотреть сообщение
Вопрос как правильно обновить данные?
notifyDatasetChanged() затратная операция, поэтому разработчики в гуглe написали утилиту DiffUtil Примеров можно найти кучу. К слову

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
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHolder> {
 
    @Nullable
    private final UserListViewModel mViewModel;
    private final OnUserClickListener mUserClickListener;
 
    List<? extends User> mUserList;
 
    public UserAdapter(@Nullable UserListViewModel viewModel,
                       @NonNull OnUserClickListener userClickListener) {
        mViewModel = viewModel;
        mUserClickListener = userClickListener;
    }
 
    public void setUserList(final List<? extends User> userList) {
        if (mUserList == null) {
            mUserList = userList;
            notifyItemRangeInserted(0, userList.size());
        } else {
            DiffUtil.DiffResult result = DiffUtil.calculateDiff(new DiffUtil.Callback() {
                @Override
                public int getOldListSize() {
                    return mUserList.size();
                }
 
                @Override
                public int getNewListSize() {
                    return userList.size();
                }
 
                @Override
                public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
                    return mUserList.get(oldItemPosition).getId()
                            == userList.get(newItemPosition).getId();
                }
 
                @Override
                public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
                    User newUser = userList.get(newItemPosition);
                    User oldUser = mUserList.get(oldItemPosition);
                    return newUser.equals(oldUser);
                }
            });
 
            mUserList = userList;
            result.dispatchUpdatesTo(this);
            mViewModel.readyToDisplayUser();
        }
    }
 
    @Override
    public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2018, 00:07
Помогаю со студенческими работами здесь

Advanced RecyclerView и Expandable RecyclerView
Сделал expandable recycler view на основе advancedRecyclerView сборочки, но не важно это думаю, наследуется от обычного RecyclerView. ...

FireBase DB. Как правильно взять данные?
Как взять данные и записать их в int - переменные из базы данных FireBase? на примере такой, как взять IDhero каждого? Не могу разобраться...

Как правильно сохранять/восстанавливать данные из Bundle
Доброго дня. Не могу точно разобраться где вызывать сохранение данных в Bundle и извлечение их оттуда. В Активити есть поле...

RecyclerView внутри recyclerView
Добрый день. Хочу сделать список recyclerView c горизонтальной прокруткой, который отображает допустим 20 элементов(card). Т.е....

Как правильно извлекать и добавлять данные с DataGridView?
Доброго времени суток, вообщем нужна ваша помощь. Почему выводяться к примеру такие ошибки: Ошибка 25 error LNK1169: юсэрЁєцхэ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru