2016-09-11 2 views
1

Я новичок в android и пытаюсь разработать приложение для Android, в котором я застрял в обратной навигации. Моя проблема: Как управлять backstack с действиями и фрагментами.Назад Навигация в Android

A1 активность с frag1 вызывает A2 активность и активность A2 отображает список пользователей, где по щелчку списка для проверки профиля пользователя, обратитесь к A1 деятельности с Frag 2.

На открытии Frag2 А1 деятельности, мы используют пристальный флаг: flag_activity_reorder_to_front и добавление frag1 к backstack с FragmentManager сделки

Теперь, если я нажимаю на спине, то это показывает A1 активность с frag1 вместо А2 деятельности.

ЕСЛИ я не добавляю frag1 в backstack, а затем обратно, он работает с первой спиной, но на второй обратно он выходит из приложения.

Любые предложения?

ответ

0

Попробуйте использовать одно действие и обрабатывать все транзакции фрагментов в нем с помощью интерфейса. Деятельность должна реализовать этот интерфейс. Пример:

public interface FragChanger { 
    int NEXT_FRAGHELLO =1; 
    int NEXT_FRAGSET = 2; 
    int NEXT_FRAGSELECT =3; 
    int NEXT_FRAGLOG=4; 
    int NEXT_FRAGCHAT=5; 

    void onFragmentChange(int nextFrag); 


} 

Следующая должно быть в Вашей деятельности:

@Override 
    public void onFragmentChange(int nextFrag) { 

     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 


     switch (nextFrag){ 
      case NEXT_FRAGHELLO: 

       break; 
      case NEXT_FRAGSET: 
       FragSet fragSet = new FragSet(); 

       ft.replace(containerId,fragSet,"fragset"); 
       ft.addToBackStack(null); 
       ft.commit(); 

       break; 
      case NEXT_FRAGSELECT: 
       FragSelect fragSelect = new FragSelect(); 

       ft.replace(containerId,fragSelect,"fragselect"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
      case NEXT_FRAGCHAT: 
       FragChat fragChat = new FragChat(); 
       ft.replace(containerId,fragChat,"fragchat"); 
       ft.addToBackStack(null); 
       ft.commit();} 
       break; 

      case NEXT_FRAGLOG: 

       ft.replace(containerId,fragLog,"fraglog"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
} 

Handling назад в вашей деятельности:

@Override 
    public void onBackPressed() { 
     Log.d(TAG,"button back pressed"); 
     //Check which fragment is displayed an do whatever you need 
     //for example like this 
if (getSupportFragmentManager().findFragmentById(containerId) instanceof FragLog){ 
     Fragment fl = getSupportFragmentManager().findFragmentByTag("fraglog"); 
     if (fl !=null){ 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 

      ft.remove(fl); 
      ft.commit(); 
      return; 
     } 
     } 


    } 

Конечно, это всего лишь пример, но может быть полезно в вашем случае

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