2014-01-28 4 views
1

У меня есть эта активность, которая сначала показывает фрагмент со списком элементов. Это прекрасно работает с этим кодом:Изменение фрагментов внутри Activity через onListItemClick()

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_act); 

    if(null == savedInstanceState) 
    { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     ListFragment glfragment = new ListFragment(); 
     fragmentTransaction.add(R.id.listfrag1, glfragment); 
     fragmentTransaction.commit(); 
    } 

} 

Ну у меня есть ListFragment и DetailFragment. Но я не знаю, как сделать переход, когда я нажимаю элемент списка. Я знаю fragmentTransaction.replace(), но я не знаю, КОГДА это можно назвать.

Я думал, что я должен использовать OnListItemClick() внутри ListFragment, но я не знаю, как использовать FragmentManager внутри фрагмента, а не в основной деятельности ... Кроме того, я хочу «экспортировать» некоторые данные в DetailFragment как будто это было намерение, но это не так.

ответ

2

Чтобы использовать диспетчер фрагментов внутри вашего фрагмента, просто позвоните getActivity().getFragmentManager() вместо getFragmentManager(). Реализация этого в вашем OnItemClickListener должна быть достаточной.

+0

Я попробовал этот @Override \t общественного недействительными onListItemClick (ListView л, Вид v, внутр позиция, длинный идентификатор) \t { \t \t FragmentManager фм = getActivity() getFragmentManager(). \t \t FragmentTransaction ft = fm.beginTransaction(); \t \t DetailFragment df = new DetailFragment(); \t \t ft.replace (R.id.listfrag1, df); \t \t ft.commit(); \t} но это не сработало ... – fcasanova

+0

ОК, моя проблема в том, что мой DetailFragment был ListFragment ... facepalm для меня. Это сработало! – fcasanova

1

Что бы я сделал это:

  • Определить интерфейс с одним методом listItemSelected() с в качестве аргумента идентификатор выбранного элемента
  • Пусть ваша деятельность реализуют этот интерфейс
  • В onAttach из ваших фрагмент списка, выполните операцию и сохраните ее как переменную-член, переданную в тип интерфейса. Убедитесь, что в onDetach вы разыгрываете его.
  • в вашем onListItemClick, вызовите этот метод на вашей деятельности
  • В своей деятельности, теперь вы можете сделать новый fragmenttransaction, на этот раз вам нужно заменить вместо добавления фрагмента
  • Чтобы создать фрагмент детали с правильным аргумент (id), используйте описанный метод here.

Это нормально нормально работать.

+0

спасибо! Я попробую это. – fcasanova

Смежные вопросы