2015-03-19 4 views
0

Я создал навигационный ящик, используя фрагменты. У меня есть функция, которая изменяет фрагменты при нажатии на элемент drawerlist. У меня есть некоторые фрагменты. Я хочу вызвать другой фрагмент внутри текущего фрагмента нажатием кнопки. но когда я нажимаю кнопку «Button It», на самом деле меняет фрагмент, но я хочу, чтобы и навигация была изменена, когда вызывается фрагмент. Пожалуйста, предложите мне что-нибудь.изменить навигационный ящик, когда фрагмент вызова из другого фрагмента

У меня есть два фрагмента с именем HomeFragment и FindPeopleFragment. и кнопка в HomeFragment фрагмента, который вызывает FindPeopleFragment

Вот мой щелчок кнопки событие записывается в HomeFragment

View rootView = inflater.inflate(R.layout.fragment_home, container, false); 

    Button btn = (Button) rootView.findViewById(R.id.find_people); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Fragment fragment = new FindPeopleFragment(); 
      if (fragment != null) { 
       FragmentManager fragmentManager = getFragmentManager(); 
       fragmentManager.beginTransaction() 
         .replace(R.id.frame_container, fragment).commit(); 
      } 
     } 
    }); 

Вот код, который изменяет фрагменты в MainActivity

Fragment fragment = null; 
    switch (position) { 
    case 0: 
     fragment = new HomeFragment(); 
     break; 
    case 1: 
     fragment = new FindPeopleFragment(); 
     break; 
    case 2: 
     fragment = new PhotosFragment(); 
     break; 
    case 3: 
     fragment = new CommunityFragment(); 
     break; 

    default: 
     break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.frame_container, fragment).commit(); 

     // update selected item and title, then close the drawer 
     mDrawerList.setItemChecked(position, true); 
     mDrawerList.setSelection(position); 
     setTitle(navMenuTitles[position]); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } else { 
     // error in creating fragment 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 

Здесь написано код в OnCreate от MainActivity

mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 

    // setting the nav drawer list adapter 
    adapter = new NavDrawerListAdapter(getApplicationContext(), 
      navDrawerItems); 
    mDrawerList.setAdapter(adapter); 

ссылка на код, в котором я делаю то же самое link

+0

Что вы понимаете, сменив навигационный ящик? Вам нужен другой навигационный ящик при смене фрагмента? Если это так, это может быть невозможно. У вас могут быть разные навигационные ящики для разных видов деятельности, но не для разных фрагментов одной и той же активности. – Apurva

+0

@Apurva Когда я выбираю FindPeopleFragment из drawerlist, он показывает меня. но когда я вызываю его из HomeFragment, то drawerlist по-прежнему показывает мне HomeFragment как выбранный. Я хочу, чтобы это было обновлено, когда я вызываю FindPeople фрагмент из HomeFragment. –

ответ

1

У меня также была аналогичная проблема. Я хотел, чтобы следующий фрагмент загружался на событие. i.e При щелчке на главном фрагменте необходимо загрузить следующий фрагмент. И когда откроется ящик навигации, выбранный элемент должен быть загружен.

Я решил проблему, вызвав метод, setItemChecked в списке объектов ящика навигации.

if (mDrawerListView != null) { 
    mDrawerListView.setItemChecked(position, true); 

Не уверен, что это правильный способ сделать, но это сработало для меня.

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