在fragment中添加点击事件,给Linearlayout添加点击监听
2016-11-06 21:04
375 查看
按钮初始化 和 添加点击事件 都必须在onActivityCreated()里面执行。
XML
fragment
在onCreateView中返回Fragment的布局文件
在onActivityCreated中通过getActivity()获取到Fragment关联的Activity,在onActivityCreated中为按钮添加监听事件。
给Linearlayout添加点击事件:
View home = layout.findViewById(R.id.LinearLayout_home);
home.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int i = 0;
}
});
需要注意的是new的是View.OnClickListener(),而不是OnClickListener()。否则找不到OnClickListener函数。
另补充下http://bbs.csdn.net/topics/360078789看的一个说明:
如果你的linearlayout中的孩子们都监听了click事件了,linearlayout是拿不到事件的。
在Android系统的中,硬件触发的事件最开始是Activity拿到的,然后它向里面的View一级级的dispatch,所以最里层的view最后拿到了事件,而它又没有孩子了,它就开始处理了(也就是响应事件)。在孩子的事件处理函数中,如果返回了false,它的父容器还是能再次拿到了事件的。如果返回了true,也就是告诉它的父容器,这事我管了,你就别过问了。
linearlayout的孩子们估计都有自己的Click事件处理函数了吧?
Click事件其实一种封装的事件,而不是我说的“硬件触发的事件”,“硬件触发的事件”指的是MouseUp, MouseDown,MouseMove和MouseCancel。View类中对于Click事件默认都是采取返回了false。所以你的linearlayout是拿不到事件的,因为它的孩子已经处理过了。
但是有一种解决方案:你可以重写linearlayout的onInterceptTouchEvent()方法,它会在事件传给孩子之前被调用。
转自 http://blog.csdn.NET/wletv/article/details/8786244
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ff00" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is fragment" /> </LinearLayout>
fragment
public class Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Button button = (Button) getActivity().findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_LONG).show(); } }); } }代码中最关键的要注意:
在onCreateView中返回Fragment的布局文件
在onActivityCreated中通过getActivity()获取到Fragment关联的Activity,在onActivityCreated中为按钮添加监听事件。
给Linearlayout添加点击事件:
View home = layout.findViewById(R.id.LinearLayout_home);
home.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int i = 0;
}
});
需要注意的是new的是View.OnClickListener(),而不是OnClickListener()。否则找不到OnClickListener函数。
另补充下http://bbs.csdn.net/topics/360078789看的一个说明:
如果你的linearlayout中的孩子们都监听了click事件了,linearlayout是拿不到事件的。
在Android系统的中,硬件触发的事件最开始是Activity拿到的,然后它向里面的View一级级的dispatch,所以最里层的view最后拿到了事件,而它又没有孩子了,它就开始处理了(也就是响应事件)。在孩子的事件处理函数中,如果返回了false,它的父容器还是能再次拿到了事件的。如果返回了true,也就是告诉它的父容器,这事我管了,你就别过问了。
linearlayout的孩子们估计都有自己的Click事件处理函数了吧?
Click事件其实一种封装的事件,而不是我说的“硬件触发的事件”,“硬件触发的事件”指的是MouseUp, MouseDown,MouseMove和MouseCancel。View类中对于Click事件默认都是采取返回了false。所以你的linearlayout是拿不到事件的,因为它的孩子已经处理过了。
但是有一种解决方案:你可以重写linearlayout的onInterceptTouchEvent()方法,它会在事件传给孩子之前被调用。
转自 http://blog.csdn.NET/wletv/article/details/8786244
相关文章推荐
- Android ListFragment 中给LinearLayout添加点击事件
- Android中Fragment点击事件的添加(及点击事件无响应的原因)
- Android中如何在Fragment中添加点击事件切换新的Fragment
- java实现table添加右键点击事件监听操作示例
- DrawerLayout的使用 侧滑加载Listview,首页使用Fragment和处理点击触摸冲突、穿透事件和监听菜单滑动状态的改变的详细介绍
- 怎么为fragment中的gridview里的item添加点击事件
- 在xml中有一个LinearLayout,在fragment中动态加入多个Button,为其赋值并添加监听,然后加入到LinearLayout
- LinearLayout获取焦点并响应点击事件监听
- Ext.Window点击右上角关闭(X按钮)添加监听事件
- Android 在XML文件中添加View点击事件的监听:OnClickListener
- Android fragment中如何对listview添加监听事件
- 给RecyclerView的item添加点击监听事件
- 高德地图显示在fragment中并添加按钮点击事件
- 关于RelativeLayout、LinearLayout添加点击事件失灵的问题
- Android edittext中添加图片并且监听图片的点击事件
- LinearLayout 点击事件 添加点击事件代码
- Android中如何为Fragment中的按钮添加监听事件
- 高德地图显示在fragment中并添加按钮点击事件
- Android FragmentTabhost 监听tab点击事件