0

Имея Навигационная ящик в деятельности и изменение фрагментов этих строк кодаФрагмент видны за последнего фрагмента и продолжается

switch (menuItem.getItemId()) { 
case R.id.home: 
    menuItem.setChecked(true); 
    drawerLayout.closeDrawer(GravityCompat.START); 
    if (getSupportFragmentManager().findFragmentByTag("ranking") == null) { 
     getSupportFragmentManager() 
       .beginTransaction() 
       .add(R.id.list_view_container, new HomeFragment(), 
         "ranking") 
       .addToBackStack("ranking") 
       .setTransition(
         FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
       .commit(); 
    } else { 
     getSupportFragmentManager().popBackStack("ranking", 0); 
    } 
    return true; 
case R.id.current_event: 
    menuItem.setChecked(true); 
    drawerLayout.closeDrawer(GravityCompat.START); 
    if (getSupportFragmentManager().findFragmentByTag("ranking1") == null) { 
     getSupportFragmentManager() 
       .beginTransaction() 
       .add(R.id.list_view_container, new CurrentEvents(), 
         "ranking1") 
       .addToBackStack("ranking1") 
       .setTransition(
         FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
       .commit(); 
    } else { 
     getSupportFragmentManager().popBackStack("ranking1", 1); 
    } 
    return true; 
} 

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

ответ

0

Поскольку вы используете add(), предыдущий Fragment не будет удален из контейнера.

Вы должны заменить вызовы на add() на replace(). Например, case R.id.home бы стать:

getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.list_view_container, new HomeFragment(), 
      "ranking") 
    .addToBackStack("ranking") 
    .setTransition(
      FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
    .commit(); 

Я хотел Fragment, чтобы остаться в памяти, так что она не должна перестроен снова и снова и снова извлекать данные из Интернета и снова

Вы можете попробовать FragmentsetRetainInstance(true) сделать это, но это не рекомендуется (и я никогда не использовал его).

Другим способом, который более подходит, является использование Fragment's onSaveInstanceState(). Вы можете прочитать об этом по адресу Developer Android.

0

Вы можете проверить это сценарий, Надеюсь, это решить вашу проблему: -

Попробовать прикрепиться и разделиться фрагмента из FragmentTransaction. Когда вы переместитесь в следующий фрагмент, отделите последний фрагмент От FragmentTransaction, и когда вы захотите его использовать, добавьте его.

См пример кода для того, как снятия и установки фрагмента, он будет поможет вам:

android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
       AndroidFragment androidFragment = (AndroidFragment) fm.findFragmentByTag("android"); 
       AppleFragment appleFragment = (AppleFragment) fm.findFragmentByTag("apple"); 
       android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 

       /** Detaches the androidfragment if exists */ 
       if(androidFragment!=null) 
        ft.detach(androidFragment); 

       /** Detaches the applefragment if exists */ 
       if(appleFragment!=null) 
        ft.detach(appleFragment); 

       /** If current tab is android */ 
       if(tabId.equalsIgnoreCase("android")){ 

        if(androidFragment==null){ 
         /** Create AndroidFragment and adding to fragmenttransaction */ 
         ft.add(R.id.realtabcontent,new AndroidFragment(), "android"); 
        }else{ 
         /** Bring to the front, if already exists in the fragmenttransaction */ 
         ft.attach(androidFragment); 
        } 

       }else{ /** If current tab is apple */ 
        if(appleFragment==null){ 
         /** Create AppleFragment and adding to fragmenttransaction */ 
         ft.add(R.id.realtabcontent,new AppleFragment(), "apple"); 
        }else{ 
         /** Bring to the front, if already exists in the fragmenttransaction */ 
         ft.attach(appleFragment); 
        } 
       } 
       ft.commit(); 

`For Reference see this onTabChanged :` [http://wptrafficanalyzer.in/blog/creating-navigation-tabs-using-tabhost-and-fragments-in-android/][1]