Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Ханасака
10 / 10 / 1
Регистрация: 12.07.2013
Сообщений: 147
1

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

29.03.2015, 18:46. Просмотров 1240. Ответов 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();
    }
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2015, 18:46
Ответы с готовыми решениями:

Как найти id записи в SQlite таблице при клике на кнопку расположенную в Listview item?
привет ! подскажите пожалуйста решение((( Кейс: у меня есть листвью ,...

Как обновить список RecyclerView после добавления item?
Как обновить список RecyclerView после добавления item? список RecyclerView...

Цвет item в listview
учусь работать с listview и наткнулся на такую проблему: когда проверял в...

FireBase + RecyclerView| как обновить список, после удаления item из базы?
Добрый всем день! есть метод который удаляет айтем (значения items берутся...

Изменить цвет у item-a в listView
Привет, вопрос такой. Задача такая: Допустим у меня есть элементы listview...

9
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
29.03.2015, 19:00 2
Цитата Сообщение от Ханасака Посмотреть сообщение
Можно конечно заново делать запрос на вывод всего list
не только можно, но и нужно
0
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
29.03.2015, 19:28 3
Пользуйтесь onActivityResult() и startActivityForResult(new Intent()). При возвращении в onActivityResult() обновляйте адаптер.

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

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

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

это заставляет адаптер перерисовать listview на основании измененного списка
2
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
30.03.2015, 13:00 8
Ну и раз уж на то пошло - весь список не будет перерисовываться, будет отрисовано только то, что сейчас на экране +2-3 элемента, все остальное будет подгружаться при скролле.
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 257
30.03.2015, 13:01 9
и то верно)
0
Ханасака
10 / 10 / 1
Регистрация: 12.07.2013
Сообщений: 147
30.03.2015, 20:16  [ТС] 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() запихнуть, то работает...
0
30.03.2015, 20:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 20:16

ListView: передача данных в item
Элементы ListView содержат три TextView и два ImageView. В первый TextView...

ListView. Задать высотку Item-а
Посмотрите этот пример(очень простой) -...

Custom ListView item setColor
Всех С Новым Годом! Начал изучать разработку под Android на IDE Android...


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

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

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