2016-10-11 7 views
0

У меня есть 4 фрагмента. Они состоят из HomeFragment, Rainfall, rainday и yieldFragment. Если прямо сейчас я на фрагменте Rainfall, то я нажимаю на него, Я хочу, чтобы фрагмент вернется к фрагменту Home (по умолчанию). Но прямо сейчас моя ситуация с аппликацией - при нажатии на откидную головку, приложение было закрыто. Я попытался использовать onBackpressed, но я думаю, что мой onBackPressed работал неправильно.set OnBackPressed in Fragment

Что я должен делать для этой ситуации .. Пожалуйста, любой может ответить. я попытался это ...

public void onBackPressed() { 

     fragment=new HomeFragment();} 

Пожалуйста, помогите мне, если кто-нибудь знает.

+0

Вы можете переопределить onBackPressed() в нем родительскую активность –

+2

Возможно дубликат [Как реализовать onBackPressed() в фрагментах?] (HTTP://stackoverflow.com/questions/5448653/how-to-implement-onbackpressed-in-fragments) –

+0

Аналогичная проблема решена [здесь] (https://stackoverflow.com/a/46425415/6831069) Наслаждайтесь –

ответ

0
  • первой очереди в момент переключателя в распадаться, используется #replace , а затем #add нового фрагмента из вашего контейнера деятельности.
  • секунд внутри вашего фрагменты, override onResume() как изображено ниже. Он вернет вам кнопку возврата назад.

    @Override общественных недействительный onResume() {

    super.onResume(); 
    
        getView().setFocusableInTouchMode(true); 
        getView().requestFocus(); 
        getView().setOnKeyListener(new View.OnKeyListener() { 
         @Override 
         public boolean onKey(View v, int keyCode, KeyEvent event) { 
    
          if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { 
    
           HomeFragment fragObj = new HomeFragment(); 
    
           getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragObj) 
             .commit(); 
    
           return true; 
          } 
    
          return false; 
         } 
        }); 
    } 
    
+0

Могу ли я спросить вас, что ссылка (R.id.fragment_container)? :) – Sasya

+0

R.id.fragment_container - это идентификатор активности вашего контейнера (основная активность/активность дома), в котором будут загружены все фрагменты. Обычно мы использовали frameLayout в качестве контейнера в боковом основном действии, и этот идентификатор ссылается на frameLayout. – Radhey

0

Добавить транзакцию фрагмента на заднюю стеку, например, так:

getSupportFragmentManager().beginTransaction() 
      .replace(R.id.your_fragment_id, RainfallFragment()) 
      .addToBackStack(null) 
      .commit() 

Если вы расширяете AppCompatActivity и используя последней версии библиотеки поддержки, вам не нужно ничего делать. Но если это не так, то переопределить onBackPressed() в вашей деятельности:

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