您的位置:首页 > 移动开发 > Android开发

Android中让Fragment监听返回键

2016-08-20 00:00 260 查看
在开发过程中,当使用了Fragment来作为界面的主要载体的时候,我们就会发现,Fragment中并没有一个方法可以像Activity一样去监听手机的返回键,那么我采取的方式是,通过一个接口来实现。

以下是具体代码,如果有错误或者需要改进的地方,欢迎指出。

接口IFragmentKeyDownHandled.java

public interface IFragmentKeyDownHandled {

public abstract void excueOnKeyDown(int keyCode, KeyEvent event);
}

实现上面这个接口的Fragment,此处我用的是写一个基类,然后具体的Fragment再去继承此基类

BaseFragment.java

public abstract class BaseFragment extends Fragment implements
IFragmentKeyDownHandled {

protected View view;

abstract protected int setResource();

abstract protected void initUI();

abstract protected void setData();

abstract protected void backFragment();

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(setResource(), container, false);
return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initUI();
setData();
}

@Override
public void excueOnKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
backFragment();
}
}

}

然后是一个Fragment的具体实现,此处以登录界面为例,监听返回键返回上一个Fragment

LoginFragment.java

public class LoginFragment extends BaseFragment {

@Override
protected int setResource() {
return R.layout.fragment_login;
}

@Override
protected void initUI() {
// TODO
}

@Override
protected void setData() {
// TODO
}

@Override
protected void backFragment(){
getFragmentManager().popBackStack();
}
}

然后是装载这个Fragment的Activity

MainActivity.java

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
}

private void initView() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.add(R.id.layout_main, new LoginFragment(), FragmentTag.LoginFragment);
tx.commit();

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 0 && fm.getFragments().get(fm.getFragments().size()-1) instanceof IFragmentKeyDownHandled){
((IFragmentKeyDownHandled) fm.getFragments().get(fm.getFragments().size()-1)).excueOnKeyDown(keyCode, event);
return true;
}
else{
return super.onKeyDown(keyCode, event);
}

}
}

以上就是全部代码,至于R.layout.activity_main的话,只需要放一个id为layout_main的布局文件即可。

其实思路就是将按钮onKeyDown通过接口的方式去调用当前Fragment中所实现的具体方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Fragment 返回键