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

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

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

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

29.03.2015, 18:46. Просмотров 952. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как изменять item listview не перерисовывая весь список? (Программирование Android):

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

Как обновить список RecyclerView после добавления item? - Программирование Android
Как обновить список RecyclerView после добавления item? список RecyclerView в DialogFragment, из контактов добавляется номер который...

FireBase + RecyclerView| как обновить список, после удаления item из базы? - Программирование Android
Добрый всем день! есть метод который удаляет айтем (значения items берутся из FireBase): public void DelPos(View v){ ...

ListView. Задать высотку Item-а - Программирование Android
Посмотрите этот пример(очень простой) - http://freehabr.ru/blog/android/2022.html Как там изменить размер элементов - они все должны быть...

ListView: передача данных в item - Программирование Android
Элементы ListView содержат три TextView и два ImageView. В первый TextView записываю данные так: ArrayAdapter&lt;String&gt; adapter = new...

EditText в одном из Item ListView - Программирование Android
Помогите решить довольно нестандартную задачу. У меня есть ListView, есть Adapter который делает кастомный вид разметки. В ListView...

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

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

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

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

это заставляет адаптер перерисовать listview на основании измененного списка
2
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
30.03.2015, 13:00 #8
Ну и раз уж на то пошло - весь список не будет перерисовываться, будет отрисовано только то, что сейчас на экране +2-3 элемента, все остальное будет подгружаться при скролле.
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 13:01 #9
и то верно)
0
Ханасака
10 / 10 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

Ошибка при выборе Item в ListView - Программирование Android
Здравствуйте уважаемые форумчане. Не могу определить где ошибся. У меня есть ListView где несколько Item-ов при клике на любой из них...

ListView кнопка добавить item в избранное - Программирование Android
Здравствуйте форумчане, не нашел в инете подобный вопрос, может неправильно делал поисковой запрос. Вообщем, у меня есть ListView со 100...


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

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

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