У меня есть FrameLayout и на нем есть фрагменты, щелкнув по кнопке, следующий щелчок должен удалить фрагмент из FrameLayout, я делаю это с помощью removeAllViews()
(FrameLayout находится в другом фрагменте, поэтому метод трансляции находится в Activity). Мне нужно сделать какое-то действие, когда начинается removeAllViews()
, и нужно сделать это в классе Фрагментов, но что-то не так.Android, когда фрагмент удален
Я пробовал: OnDestroy()
OnDestroyView()
OnPause()
в классе Фрагмент
, но он работает как:
- пут Фрагмент в FrameLayout (от деятельности)
- использования
removeAllViews()
(от деятельности) - нет фрагмента в FrameLayout (есть c Лир), но ничего не происходит, и методы не работают
- поставить новый фрагмента в FrameLayout (от активности) - теперь все методы (
OnDestroy()
из класса Fragment) работает (возможно, это в режиме реальное время дляdestroy
старого фрагмента)
Как можно «получить момент», когда Фрагмент не существует для пользователя? Я хочу отправить некоторую информацию на сервер, если пользователь скрывает фрагмент.
@ EDIT3 кода из метода от деятельности, где я хочу, чтобы сделать translaction
public void showProductsList(String productType,int containerID){
List<String> prodNames = new ArrayList<String>();
List<Long> prodIds = new ArrayList<Long>();
DatabaseDAOProdProtein dao = new DatabaseDAOProdProtein(getApplicationContext());
dao.open();
List<DatabaseProduct> productList = dao.getAllProducts();
for(int i=0;i<productList.size();i++){
prodNames.add(productList.get(i).getName());
prodIds.add(productList.get(i).getId());
}
dao.close();
ProductsList productsList = new ProductsList(productType,prodNames,prodIds);
productsList.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
Toast.makeText(getApplicationContext(),"action1 " ,Toast.LENGTH_LONG).show();
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
Toast.makeText(getApplicationContext(),"action2 " ,Toast.LENGTH_LONG).show();
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
Toast.makeText(getApplicationContext(),"action3 " ,Toast.LENGTH_LONG).show();
}
}
});
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(containerID, productsList).commit();
}
Я использовал этот метод в другом фрагменте с помощью:
((MainActivity) getContext()).showProductsList("carb", carbContainer.getId());
Существует ошибка:
Error:(560, 21) error: cannot find symbol method setOnSystemUiVisibilityChangeListener(<anonymous OnSystemUiVisibilityChangeListener>)
Я не пробовал, но до сих пор ничего (код в моем посте) – barmi
Поместите приемник на своем фрагменте при ее создании (rootView). –
Я создаю его в Activity (редактировал мой пост снова). Не могли бы вы объяснить мне, как подать слушателя, пожалуйста? – barmi