Fragment中实现dispatchKeyEvent事件
来源:互联网 发布:mac怎么下载ed2k 编辑:程序博客网 时间:2024/05/21 17:45
前言
我们在开发中发现,在Fragment中是无法重写dispatchKeyEvent(KeyEvent event)函数的。 那么如果确实想在Fragment中处理KeyEvent事件逻辑的话,就没有办法了么?当然有办法,有什么能难倒程序猿~~
解决方法
解决方法有两种。
第一种
通过接口把Fragment所关联的activity的KeyEvent事件传递给Fragment。具体做法如下:
首先创建一个接口:
public interface FragmentKeyeventListener { boolean onFragmentKeyEvent(KeyEvent event);}
接着用fragment来实现这个接口,然后在fragment所attached的activity中设置FragmentKeyeventListener 接口为其的成员变量
并给它设置set方法。Fragment代码如下:
public class TestFragment extends Fragment implements FragmentKeyeventListener{ TestActivity testActivity ; @Override public void onAttach(Activity activity) { super.onAttach(activity); testActivity = (TestActivity)activity; testActivity.setFragmentKeyeventListener(this); } @Override public boolean onFragmentKeyEvent(KeyEvent event) { return false; }}
activity部分代码如下:
public void setFragmentKeyeventListener(FragmentKeyeventListener fragmentKeyeventListener) { this.fragmentKeyeventListener = fragmentKeyeventListener; } @Override public boolean dispatchKeyEvent(KeyEvent event) { if (fragmentKeyeventListener!=null){ fragmentKeyeventListener.onFragmentKeyEvent(event); return true; } return super.dispatchKeyEvent(event); }
这样activity的keyevent事件就传到了它所关联的Fragment的中了,我们就可以在Fragment中处理按键事件了。
第二种
Fragment的布局展示是在:
@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); }
onCreateView中控制的,我们可以通过return 一个View来显示fragment的布局这个大家都知道
return的这个view可以是inflater得到的,也可以是自定义的一个View。
那第二种处理keyevent的方法就是在自定义view中实现的。
我们在fragment对应的自定义布局view中可以重写dispatchKeyEvent方法,处理逻辑。
那么就相当于这个view的宿主fragment处理了keyevent逻辑。
代码如下:
public class FragmenLayoutView extends ViewGroup { public FragmenLayoutView(Context context) { super(context); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { } @Override public boolean dispatchKeyEvent(KeyEvent event) { return super.dispatchKeyEvent(event); //处理KeyEvent事件逻辑 }}
@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return new FragmenLayoutView(container.getContext()); }
阅读全文
1 0
- Fragment中实现dispatchKeyEvent事件
- andorid中dispatchkeyevent事件传递及焦点获取
- Android中fragment实现按钮点击事件
- Android中在fragment中实现点击按钮事件
- Fragment中监听事件
- 按钮的监听事件在fragment中如何实现
- Android中Activity调用Fragment事件,通过回调实现。
- Android dispatchKeyEvent和onKeyDown事件的处理
- 实现 Fragment 触摸事件处理
- Fragment实现onTouchEvent事件监听
- Android Fragment中监听事件
- Fragment中监听onKey事件
- Fragment中监听onKeyDown事件
- Fragment中处理触摸事件
- android中fragment实现
- Android导航中Fragment里实现ViewPager滑动和RadioButton单击事件
- 如何在Fragment中监听触摸事件 手动实现触摸分发
- Android Fragment中监听onTouch事件
- WinPcap编程技术博客转载
- html5的本地存储
- 使用NDK编译ffmpeg
- Lucene学习总结之九:Lucene的查询对象(2)
- 路由跟踪工具0trace
- Fragment中实现dispatchKeyEvent事件
- 指数哥伦布编码
- linux下错误的捕获:errno和strerror的使用
- springmvc中一个Action中,写多个类似的业务控制方法+在业务控制方法中写入普通变量收集参数+限定某个业务控制方法。只允许GET或POST请求方式访问
- java二分查找
- IT学生解惑真经
- Java语法基础练习题一
- 基于java config的springSecurity(三)--加入RememberMe,启用CSRF和增强密码
- bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp