1

У меня 2 объекта (ов). Внутри 1-й деятельности есть первоначально один фрагментКак стрелять onResume() сверху только для большинства фрагментов, на заднем пульте

MainActivity.java

public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myactivity); 
     if(savedInstanceState == null) { 
      getFragmentManager().beginTransaction().replace(R.id.fragmentContainer, MainFragment.newInstance().commit(); 
     } 
    } 
} 

затем нажав на кнопку replaces его с другим фрагментом.

@Override 
public void onClick(View arg0) { 
    DetailFragment detail = (DetailFragment)getFragmentManager().findFragmentById(R.id.detail); 
    getFragmentManager().beginTransaction().replace(R.id.detail, detail, "detail").commit(); 
} 

На втором фрагменте есть еще одна кнопка, при нажатии на нее открывается новая активность.

Intent popUp = new Intent(MainActivity.this, PopUp.class);      
popUp.putExtra("CarID", carID); 
startActivity(popUp); 

Из операции PopUp, нажатие на устройство возвращается к MainActivity. Теперь задача бизнес-логики приложения - мне нужно обновить заголовок ActionBar предыдущей MainActivity, когда пользователь вернется.

Для этого я слушаю onResume() как для MainFragment, так и для DetailFragment. Также когда пользователь возвращается из DetailFragment в MainFragment, я обновляю заголовок ActionBar другим текстом.

Так что мне нужно знать, когда именно пользователь возвращается из:

1) PopUp деятельности> Деталь Фрагмент

2) Деталь Фрагмент> Main Фрагмент

В настоящее время onResume() обжигали как на MainFragment, так и на DetailFragment, когда PopUpActivity закрыт. На MainFragment Я не могу точно узнать, вызывается ли onResume() для 1-го или 2-го случая.

Что является лучшей практикой стрелять onResume() на DetailFragment только тогда, когда пользователь возвращается из PopUpActivity>DetailFragment. Другими словами, как определить из DetailFragment, что PopUpActivity закрыт без увольнения onResume() по адресу MainFragment.

ответ

3

Я бы не возился с onResume() для чего-то подобного.

Я предложил бы делать следующее:

  • Создать Stack<String> для заголовков.
  • Внесите FragmentManager.OnBackStackChangedListener в ваш MainActivity.
  • В реализации onBackStackChanged() проверьте, была ли нажата или вытолкнута задняя стопка с помощью FragmentManager.getBackStackEntryCount().
    • Если задний стоп был нажат, нажмите название вновь отображаемого фрагмента в стек заголовка.
    • Если задний стек был выбит, введите название и установите заголовок заголовка в новом верхнем углу стека.
  • Если установить заголовок из фрагмента, который не добавлен в задней стеке, поп заголовок из стека заголовка и нажать на название вновь отображаемого фрагмента, т.е. заменить название в верхней части стек.
  • Вызовите PopupActivity с startActivityForResult() вместо startActivity().
  • Переопределить onActivityResult() в вашем MainActivity, так что, когда возвращается PopupActivity, вы устанавливаете строку заголовка с заголовком в верхней части стека.
  • Не забудьте сохранить стек заголовков в onSaveInstanceState() в своем MainActivity и восстановить его в onCreate().

Это может показаться большой работой только для сохранения титров, но вы будете сходить с ума, пытаясь сделать это с помощью onResume.

0

попробовать:

@Override 
public void 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){ 

      // handle back button 

      return true; 

     } 

     return false; 
    } 
}); 

}

+0

Я дам ему идти. Благодарю. – Adnan