Android中让Fragment监听返回键
2016-08-20 00:00
260 查看
在开发过程中,当使用了Fragment来作为界面的主要载体的时候,我们就会发现,Fragment中并没有一个方法可以像Activity一样去监听手机的返回键,那么我采取的方式是,通过一个接口来实现。
以下是具体代码,如果有错误或者需要改进的地方,欢迎指出。
接口IFragmentKeyDownHandled.java
实现上面这个接口的Fragment,此处我用的是写一个基类,然后具体的Fragment再去继承此基类
BaseFragment.java
然后是一个Fragment的具体实现,此处以登录界面为例,监听返回键返回上一个Fragment
LoginFragment.java
然后是装载这个Fragment的Activity
MainActivity.java
以上就是全部代码,至于R.layout.activity_main的话,只需要放一个id为layout_main的布局文件即可。
其实思路就是将按钮onKeyDown通过接口的方式去调用当前Fragment中所实现的具体方法。
以下是具体代码,如果有错误或者需要改进的地方,欢迎指出。
接口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 监听返回键
- Android小技巧 - Fragment监听返回键
- Android Fragment中监听返回键
- android fragment轻松监听返回键/Fragment中的popupwindow响应返回键隐藏
- android Fragment 无法用返回键监听
- Android开发-Fragment返回键监听-AndroidStudio
- Android fragment监听返回键
- Android必知必会-Fragment监听返回键事件
- Android:Fragment返回栈的监听和弹栈 随记
- android 在fragment中怎么监听返回键,home键
- Android必知必会-Fragment监听返回键事件
- Android 优雅的让Fragment监听返回键
- Android开发:监听当前View的左右滑动事件,并返回给当前的activity或者fragment
- 【android进阶】Fragment内放置WebView,监听返回键,并返回之前打开的网页
- Android 监听Fragment返回键的方式之一
- Android中Fragment监听返回按钮及返回栈BackStack的一些处理
- Android之小技巧 - Fragment监听返回键
- Android开发实现Fragment监听返回键事件功能的方法
- android 在fragment中如何监听返回键,home键
- Android开发-Fragment返回键监听-AndroidStudio