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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
#1

Как изменять item listview не перерисовывая весь список? - Программирование Android

29.03.2015, 18:46. Просмотров 841. Ответов 9
Метки нет (Все метки)

Здравствуйте!
Имеется активити с выводом list при помощи SimpleCursorAdapter. При нажатии на любой item переносит в другой активити, где можно отредактировать запись. Далее по нажатию на back меня возвращает на первоначальное активити с первоначальным лист, однако item выглядит то неотредактированным. Можно конечно заново делать запрос на вывод всего list, однако хотелось бы запросить от базы только запись с id, которая редактировалась и изменить текст только одного item.
В первом активити я делал так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
lvMain.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent myIntent = new Intent(ShowAllList.this,
                        ShowPersonInfo.class);
                Cursor cursor = (Cursor) scAdapter.getItem(position);
                myIntent.putExtra("_id",
                        cursor.getString(cursor.getColumnIndex("_id")));
                myIntent.putExtra("position",
                        position);
                startActivity(myIntent);
            }
        });
Во втором:
Java
1
2
3
4
5
6
7
8
9
10
11
public void onBackPressed() {
        if(isEdited){
            Intent intent = new Intent(this, ShowAllList.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.putExtra("edit", isEdited);
            intent.putExtra("_id", id);
            intent.putExtra("position", position);
            startActivity(intent);
        }
        super.onBackPressed();
    }
И опять в первом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
@Override
    protected void onResume() {
        Intent intent = getIntent();
        if(intent.hasExtra("edit")){
            boolean edit = intent.getBooleanExtra("edit", false);
            if(edit){
                int position = intent.getIntExtra("position", -1);
                //Дальше как найти и менять текст в View элементе?
            }
        }
        super.onResume();
    }
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2015, 18:46     Как изменять item listview не перерисовывая весь список?
Посмотрите здесь:
Android Как найти id записи в SQlite таблице при клике на кнопку расположенную в Listview item?
Android Как обновить список RecyclerView после добавления item?
FireBase + RecyclerView| как обновить список, после удаления item из базы? Android
Custom ListView item setColor Android
EditText в одном из Item ListView Android
Android ListView: передача данных в item
ListView. Задать высотку Item-а Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
29.03.2015, 19:00     Как изменять item listview не перерисовывая весь список? #2
Цитата Сообщение от Ханасака Посмотреть сообщение
Можно конечно заново делать запрос на вывод всего list
не только можно, но и нужно
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
29.03.2015, 19:28     Как изменять item listview не перерисовывая весь список? #3
Пользуйтесь onActivityResult() и startActivityForResult(new Intent()). При возвращении в onActivityResult() обновляйте адаптер.

Вот пример использования этого метода.
http://startandroid.ru/ru/uroki/vse-...forresult.html
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
30.03.2015, 00:24  [ТС]     Как изменять item listview не перерисовывая весь список? #4
Цитата Сообщение от Armagedo Посмотреть сообщение
не только можно, но и нужно
Это еще почему? Я изменяю запись только в ОДНОМ пункте меню. А если в базе очень много записей? По нажатию на кнопку назад пользователь будет долго ждать, пока заново сформируется list
Цитата Сообщение от dajver Посмотреть сообщение
Пользуйтесь onActivityResult() и startActivityForResult(new Intent()). При возвращении в onActivityResult() обновляйте адаптер
Это по сути ничем не отличается от того пути, как делаю я. Тут вопрос в том, как найти нужные View элементы в нужном item и затем менять информацию в них, делая запрос к базе только по ОДНОЙ записи...
Но все равно спасибо...
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
30.03.2015, 00:38     Как изменять item listview не перерисовывая весь список? #5
Тут вопрос в том, как найти нужные View элементы в нужном item и затем менять информацию в них, делая запрос к базе только по ОДНОЙ записи...
Зачем так сложно? Когда можно просто обновить адаптер после возвращения обратно на активити?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
30.03.2015, 09:08     Как изменять item listview не перерисовывая весь список? #6
Цитата Сообщение от dajver Посмотреть сообщение
можно просто обновить адаптер
Что-то я вас не узнаю в гриме
Что значит "обновлять адаптер"?
Обновляем источник данных для адаптера и даём комманду notifyDataSetChanged().

Цитата Сообщение от Ханасака Посмотреть сообщение
Это еще почему?
Потому, что когда почитаете документацию и примеры реализации, то вот тогда...
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 09:49     Как изменять item listview не перерисовывая весь список? #7
попробую объяснить по-проще, вдогонку последнему комментарию

У тебя есть список на 5 элементов, который ты отображаешь в listview через adapter.
Затем ты добавляешь в список еще один элемент (их стало 6) и хочешь, чтобы изменение отобразилось - вызываешь notifyDataSetChanged()

это заставляет адаптер перерисовать listview на основании измененного списка
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
30.03.2015, 13:00     Как изменять item listview не перерисовывая весь список? #8
Ну и раз уж на то пошло - весь список не будет перерисовываться, будет отрисовано только то, что сейчас на экране +2-3 элемента, все остальное будет подгружаться при скролле.
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 13:01     Как изменять item listview не перерисовывая весь список? #9
и то верно)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 20:16     Как изменять item listview не перерисовывая весь список?
Еще ссылки по теме:
Изменить цвет у item-a в listView Android
Ошибка при выборе Item в ListView Android
ListView кнопка добавить item в избранное Android
В listView в item отображать картинки одинакового размера Android
Убрать все виды выделений с item в ListView Android

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

Или воспользуйтесь поиском по форуму:
Ханасака
10 / 10 / 0
Регистрация: 12.07.2013
Сообщений: 147
30.03.2015, 20:16  [ТС]     Как изменять item listview не перерисовывая весь список? #10
Спасибо за науку, господа!

Добавлено через 28 минут
Кстати, почему то не перерисовывается список через startActivityForResult().....
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode==RESULT_OK){
            if(requestCode==REQUEST_CODE_SHOW_PERSON_INFO){
                if(data.hasExtra("edit")){
                    boolean edit = data.getBooleanExtra("edit", false);
                    if(edit){
                        Log.d(LOG_TAG, "we are here");
                        scAdapter.notifyDataSetChanged();
                    }
                }
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
Выводит "we are here".....
Хотя если в onResume() запихнуть, то работает...
Yandex
Объявления
30.03.2015, 20:16     Как изменять item listview не перерисовывая весь список?
Ответ Создать тему
Опции темы

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