Fragment可以说是在Android开发必需要使用到技术,项目中的界面基本上都是使用Fragment来实现,而Activity只是作为Fragment的载体,但有些特殊情况下Fragment也不得不处理Back键,如果是Activity的话还好说,直接覆盖 Activity的onBackPressed 即可,但Fragment可就没有这么幸运了,你可能和我一样,最开始有这样的需求的时候都会想去覆盖Fragment的onBackPressed方法,但是事与愿违,Fragment中并没有这样的方法,不仅如此,Fragment也没有更不可能有onKeyDown、onKeyUp这样的方法,那么Fragment如何处理back键成难题。
在此之前先卖个关子看看别人都是怎么实现的,看过的该方式的同学可以直接到最后。
别人的实现方式
注:出自优雅的让Fragment监听返回键
1、定义一个BackHandledInterface
public interface BackHandledInterface {
public abstract void setSelectedFragment(BackHandledFragment selectedFragment);
}
2、定义一个BackHandledFragment 抽象类继承Fragment并提供一个onBackPressed方法,所有的Fragment都派生自该类
public abstract class BackHandledFragment extends Fragment {
protected BackHandledInterface mBackHandledInterface;
protected abstract boolean onBackPressed();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(!(getActivity() instanceof BackHandledInterface)){
throw new ClassCastException("Hosting Activity must implement BackHandledInterface");
}else{
this.mBackHandledInterface = (BackHandledInterface)getActivity();
}
}
@Override
public void onStart() {
super.onStart();
mBackHandledInterface.setSelectedFragment(this);
}
}
3、Activity实现第一步中