2016-02-02 8 views
-1

Я реализовал навигацию назад на кнопку «Назад» в MainActivity (у которой много фрагментов), используя onBackPressed(). Я хочу реализовать ту же самую загрузку backstack при нажатии кнопки Up. Проблема в том, что я хочу только кнопку «Вверх» в одном фрагменте, но кнопка «Вверх» появляется на каждом фрагменте, когда я нажимаю кнопку «Вверх» на нужном фрагменте. Даже setDisplayHomeAsEnabled (false) не работает. Как иметь кнопку «Вверх» только в одном фрагменте?правильная обратная навигация при нажатии кнопки «Вверх»

Desired Fragment: 
 

 
@Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 
     
 
    }
Main Activity 
 

 
public class HomePage extends AppCompatActivity { 
 

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

 

 
     if (findViewById(R.id.fragment_place) != null) { 
 

 
      if (savedInstanceState != null) { 
 
       return; 
 
      } 
 
      HomeFrag firstFragment = new HomeFrag(); 
 
      getSupportFragmentManager().beginTransaction().add(R.id.fragment_place, firstFragment).commit(); 
 
     } 
 

 
    } 
 

 
/* @Override 
 
    public boolean onOptionsItemSelected(MenuItem item) { 
 
     switch (item.getItemId()) { 
 
      case android.R.id.home: 
 
       onBackPressed(); 
 
       break; 
 
      default: 
 
       break; 
 
     } 
 
     return super.onOptionsItemSelected(item); 
 
    } */ 
 

 

 
    public void selectFrag(View view) { 
 
     Fragment fr = null; 
 

 
     if (view == findViewById(R.id.home_btn)) { 
 
      fr = new HomeFrag(); 
 

 
     } else if (view == findViewById(R.id.search_btn)) { 
 
      fr = new SearchFrag(); 
 

 

 
     } else if (view == findViewById(R.id.log_btn)) { 
 
      fr = new LogFrag(); 
 

 
     } else if (view == findViewById(R.id.events_btn)) { 
 
      fr = new EventFrag(); 
 

 
     } else if (view == findViewById(R.id.profile_btn)) { 
 
      fr = new ProfileFrag(); 
 

 
     } 
 

 
     FragmentManager fm = getSupportFragmentManager(); 
 
     FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
 
     fragmentTransaction.replace(R.id.fragment_place, fr).addToBackStack(null); 
 
     fragmentTransaction.commit(); 
 

 
    } 
 

 
    @Override 
 
    public void onBackPressed() { 
 
     if (getFragmentManager().getBackStackEntryCount() > 0) 
 
      getFragmentManager().popBackStack(); 
 
     else 
 
      super.onBackPressed(); 
 
    } 
 
}

ответ

0

Я создал пример приложения на GitHub, чтобы решить такую ​​проблему backstack.

Fragment Back Stack приложение

+0

Обратная связь работает нормально. Его кнопка навигации вверх, которая не работает. Я просто хочу, чтобы кнопка «Вверх» отображалась только в одном фрагменте. @Chintan –