Страница 1 из 1

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

Добавлено: 08 июн 2013, 14:30
gloft
В одной активности созданы два фрагмента содержащие списки.
При выборе пункта в одном из списков (первый фрагменте) должны обновляться данные в другом списке (второй фрагменте).

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 11 июн 2013, 11:22
Foenix
в методе bindView адаптера списка нужно менять цвет пункта на нужный, остальные цвета сбрасывать в дефолтный. А чтоб его поменять нужно поле завести для того пункта (типа boolean), который отмечается.

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

Добавлено: 11 июн 2013, 11:23
Foenix
Но вообще так в последних версиях андроида не рекомендуется - выделять пункты списков. Пользователь может список пролистнуть куда-нибудЬ и не будет видеть выделенный пункт, потом ченить сработает по логике программы, а пользователь будет репу чесать чей-то было.

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

Добавлено: 11 июн 2013, 15:15
gloft
Тогда как правильно это делать, если они не рекомендуют через bindView?

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

Добавлено: 11 июн 2013, 17:01
Foenix
не не рекомендуют через bindView, а не рекомендуют выделять элементы

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

Добавлено: 12 июн 2013, 10:33
gloft
Только вот проблема еще в том что bindView это метод класса SimpleCursorAdapter, а я использую SimpleAdapter.

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

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

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

Добавлено: 12 июн 2013, 10:39
Foenix
адаптер нужно писать свой, естественно

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

Добавлено: 12 июн 2013, 12:08
rezak90
используйте BaseAdapter для обычных данных и SimpleCursorAdapter для курсоров