我正在尝试从ViewPager subFragment实现 onBackPressed() 。我有一些问题。我做了两个人的倾听和实施。但它仅适用于片段B.但是当我从片段B中删除实现时,onBackPressed()为片段A工作。我做错了什么?任何帮助apraciete!
的 结构
我做了听众
public interface OnBackPressedListener {
public void onBackPressed();
}
在主要活动中使用此监听器
public void setfragmentclick(OnBackPressedListener ob){
onBackPressedListener = ob;
}
@Override
public void onBackPressed() {
onBackPressedListener.onBackPressed();
}
在Fragment中实现OnBackPressedListener接口
MainActivity mainActivity = new MainActivity();
mainActivity.setfragmentclick(this);
....
@Override
public void onBackPressed() {
if (getChildFragmentManager().getBackStackEntryCount() > 0) {
getChildFragmentManager().popBackStack();
}
}
在Fragment B中还实现了OnBackPressedListener接口
MainActivity mainActivity = new MainActivity();
mainActivity.setfragmentclick(this);
....
@Override
public void onBackPressed() {
if (getChildFragmentManager().getBackStackEntryCount() > 0) {
getChildFragmentManager().popBackStack();
}
}
答案 0 :(得分:0)
我发现了另一种从ViewPager sub Fragment实现onBack的方法。如果您在ViewPager中有子片段,最好的方法是在父片段的 onResume 中使用 KeyEvent.KEYCODE_BACK 有子片段使用这个:
@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) {
if (getChildFragmentManager().getBackStackEntryCount() > 0)
getChildFragmentManager().popBackStack();
return true;
}
return false;
}
});
}