关于监听虚拟按键中的返回键:activity和fragmentActivity中只需要重写onTouchEvent或者onBackPressed方法即可。但是fragment中没有这两个方法,所以并不能通过重写来监听back键。
所以我通过回调来实现了该方法的监听。
项目地址:https://github.com/chengxp/BackKeyWithFragment
代码目录结构:
首先定义一个接口类:
也可以在需要监听back键的fragment中直接定义这个接口,但为了方便所有的fragment都可以用到,我这边是直接创建了一个接口类。
IBackInterface.java
public interface IBackInterface { void setSelectedFragment(Fragment fragment);}
然后在承接fragment的Activity中实现这个接口:
MainActivity.java
public class MainActivity extends AppCompatActivity implements IBackInterface{
private Fragment fragment; //用于传递监听back键的fragment
...
@Override
public void setSelectedFragment(Fragment fragment) {
this.fragment = fragment;
}
再到需要监听back键的fragment中
FragmentTwo.java
private IBackInterface backInterface;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...
backInterface = (IBackInterface)getActivity();
backInterface.setSelectedFragment(this);//将fragment传递到Activity中
return view;
}
/**
* 用于返回是否需要实现监听
*/
public boolean onBackPressed() {
if(判断条件) {
return true;//监听back键,用于处理自己的点击事件
}
return false;//原生back效果
}
最后再返回承接fragment的Activity中处理点击事件
MainActivity.java
@Override
public void onBackPressed() {
if (fragment != null && ((FragmentTwo) fragment).onBackPressed()) {
//实现具体的点击效果
} else {
super.onBackPressed();
}
}
效果图: