Обновление фрагмента

Интерфейс, диалоги, темы, стили, меню
Ответить
gloft
Сообщения: 4
Зарегистрирован: 08 июн 2013, 12:37

Обновление фрагмента

Сообщение gloft » 08 июн 2013, 14:30

В одной активности созданы два фрагмента содержащие списки.
При выборе пункта в одном из списков (первый фрагменте) должны обновляться данные в другом списке (второй фрагменте).

Я пытался использовать для обновления данных второго списка метод notifyDataSetChanged который вызывается для адаптера.
Проблема в том, что по логам уведомление срабатывает, данные обновляются, вот только вид отображения второго списка не меняется.

Обновление данных срабатывает только один раз, когда происходит выбор пункта в первый раз после запуска приложения.

Подскажите методику как правильно обновлять данные во фрагменте.
Прошу заметить что во фрагменте находится список, а не активность и мне необходимо менять не активности, а данные в списке.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Обновление фрагмента

Сообщение rezak90 » 08 июн 2013, 15:07

Нет такого понятия как "обновить фрагмент", обновляются данные:
Всё что нужно - это получить ссылку на фрагмент Б из фрагмента А.

Код: Выделить всё

FragmentManager fm = getActivity().getSupportFragmentManager();
if(fm != null)
{
    Fragment fragmentB = fm.findFragmentById(R.id.fragmentB);// так же можно fm.findFragmentByTag(FragmentB.TAG) если при добавления фрагмента использовался тег
    if(fragmentB != null)
    {
        //имеем ссылку на фрагмент Б, делаем уже что хотим, Вам нужно написать метод который будет обновлять данные в фрагменте Б, например:
        fragmentB.updateData();
    }
}
R.id.team
Политика на форуме запрещена

gloft
Сообщения: 4
Зарегистрирован: 08 июн 2013, 12:37

Re: Обновление фрагмента

Сообщение gloft » 10 июн 2013, 20:22

С обновлением разобрался.
Есть еще один нюанс.
Первый список во фрагменте имеет штатный вид и стиль (android.R.layout.simple_list_item_activated_1), второй список имеет "самописный" вид и подгружается через SimpleAdapter.
При выборе пункта в первом списке пункт остается подсвеченным, при выборе из второго списка пункт временно мигает но подсветка не остается.
В событии onListItemClick второго списка я могу определить какой пункт был выбран, но вот как подсветить его?

У списка принудительно задал режим работы setChoiceMode(ListView.CHOICE_MODE_SINGLE), может чего то еще не хватает?

В каком направлении двигаться, о чем необходимо почитать?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обновление фрагмента

Сообщение Foenix » 11 июн 2013, 11:22

в методе bindView адаптера списка нужно менять цвет пункта на нужный, остальные цвета сбрасывать в дефолтный. А чтоб его поменять нужно поле завести для того пункта (типа boolean), который отмечается.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обновление фрагмента

Сообщение Foenix » 11 июн 2013, 11:23

Но вообще так в последних версиях андроида не рекомендуется - выделять пункты списков. Пользователь может список пролистнуть куда-нибудЬ и не будет видеть выделенный пункт, потом ченить сработает по логике программы, а пользователь будет репу чесать чей-то было.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

gloft
Сообщения: 4
Зарегистрирован: 08 июн 2013, 12:37

Re: Обновление фрагмента

Сообщение gloft » 11 июн 2013, 15:15

Тогда как правильно это делать, если они не рекомендуют через bindView?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обновление фрагмента

Сообщение Foenix » 11 июн 2013, 17:01

не не рекомендуют через bindView, а не рекомендуют выделять элементы
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

gloft
Сообщения: 4
Зарегистрирован: 08 июн 2013, 12:37

Re: Обновление фрагмента

Сообщение gloft » 12 июн 2013, 10:33

Только вот проблема еще в том что bindView это метод класса SimpleCursorAdapter, а я использую SimpleAdapter.

Создал у себя проект аналогичный "Урок 48. Используем SimpleAdapter".
Подправил его немного, удалил в шаблоне CheckBox и ссылку на него при создании адаптера.
Эффект тот же самый, что и у меня. Элементы подсвечиваются только на в момент нажатия, но вот после снова меняют цвет.

Вопрос знатокам: а SimpleAdapter вообще предусматривает поведение аналогичное обычному списку?
Может я не тот адаптер использую?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обновление фрагмента

Сообщение Foenix » 12 июн 2013, 10:39

адаптер нужно писать свой, естественно
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Обновление фрагмента

Сообщение rezak90 » 12 июн 2013, 12:08

используйте BaseAdapter для обычных данных и SimpleCursorAdapter для курсоров
R.id.team
Политика на форуме запрещена

Ответить