怎样解决ListView条目中的Button事件
来源:互联网 发布:淘宝举报假冒伪劣 编辑:程序博客网 时间:2024/05/16 13:57
ListView条目中的button事件的监听以及子控件与父控件的事件冲突处理
1.事件冲突处理
listview的条目中当子项包括Button或者CheckBoX等控件时,点击条目无效。这里是因为Button或者CheckBoX将条目上的焦点抢走了。
解决方法:在listview条目的 根布局 中加 上
android:descendantFocusability="blocksDescendants"
android:descendantFocusability
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点 afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点 blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
一般我们会选择第三种。
好了就这样冲突问题就解决了;
ListView中获取view对象注意的问题;
只讲一点关于getview()方法中怎样获得视图对象的;
LayoutInflater view = LayoutInflater.from(mContext);
1. convertView = view.inflate(R.layout.item_list, null);
2. convertView = view.inflate(R.layout.item_list, parent, false);
这里许多人为了简便喜欢用第一种表达式,但其实通过下面的源码我们知道,
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) { return inflate(resource, root, root != null); }
方法1最终会调用方法2.所以以后书写的过程中最好是直接调用后者
下面正式进入主题--ListView中子控件的点击事件如何操作!
1.首先明白一点listview条目是不支持子控件的点击事件的,所以这里我们需要自定义条目子控件的点击事件。
原理:
- 首先需要自定义一个类去实现View.OnClickListener代码如下
class MyListener implements View.OnClickListener { int mPosition; public MyListener(int inPosition) { mPosition = inPosition; } @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(mContext, "被点击了-" + mPosition, Toast.LENGTH_SHORT).show(); } }
- 第二步在getview()方法中实现MyListener并得到他的对象。
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; MyListener myListener = null; if (null == convertView) { myListener = new MyListener(position);
- 在设置点击事件前要去设置button的标记位,为了让每个button拥有自己的位置。
adapter的完整代码如下
package com.example.bankman.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.example.bankman.R;import java.util.List;public class ListAdapter extends BaseAdapter { private Context mContext; private List<String> mData; public ListAdapter(Context context, List<String> data) { mContext = context; mData = data; } @Override public int getCount() { if (null != mData) { return mData.size(); } return 0; } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; MyListener myListener = null; if (null == convertView) { myListener = new MyListener(position); LayoutInflater view = LayoutInflater.from(mContext); convertView = view.inflate(R.layout.item_list, parent, false); viewHolder = new ViewHolder(); viewHolder.mButton = (Button) convertView.findViewById(R.id.item_button); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.mButton.setText(mData.get(position)); //设置标记位置让每个条目的Button都记住自己的位置; viewHolder.mButton.setTag(position); viewHolder.mButton.setOnClickListener(myListener); return convertView; } private class ViewHolder { TextView mTextView; Button mButton; } private class MyListener implements View.OnClickListener { int mPosition; public MyListener(int inPosition) { mPosition = inPosition; } @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(mContext, "被点击了-" + mPosition, Toast.LENGTH_SHORT).show(); } }}
0 0
- 怎样解决ListView条目中的Button事件
- Android:处理ListView条目中的Button的点击事件和条目点击事件冲突
- listview中有button,强占条目的点击事件
- Listview中的button点击事件
- listview条目、button的解决方法
- 如何判断listview同一条目被多次点击 listview每个条目中有一个button 点击button可以删除条目中的数据
- ListView中的条目长按点击事件的实现
- 解决Android中Listview条目里面有checkbox、radiobutton无法响应条目点击事件
- Android ListView中item条目点击被item上的button点击事件抢夺的解决方案
- listview的条目双击事件
- 一般情况下ListView中的 item点击事件和 item 中的Button按钮点击事件 同时需要时,就会出现Button抢占了item的焦距问题,导致ListView中的item点击事件无效,解决
- 解决listview条目错乱问题
- ListView ItemClick和Button单击事件冲突的解决
- 解决ListView的Item包含Button的点击冲突事件
- ListView中Button事件
- ListView与其中的Button,EditText等Widget的click事件
- Android ListView中的Button屏蔽onItemClick事件解决办法
- ListView中的组件Button的OnClick事件触发时机
- Leetcode 90 - Subsets II(Search)
- 我的科研生活2017-2-17
- POJ 3530 A Modular Arithmetic Challenge 英文少
- bzoj2754&JZOJ2834【SCOI2012】喵星球上的点名 AC自动机+STL
- apk签名冲突 与旧版不同解决办法 apk签名比对
- 怎样解决ListView条目中的Button事件
- JSP页面使用举例(单表的增删查功能实现)
- 使用Hexo搭建博客
- CHM文档打不开的问题解决方法
- 判断n 是不是素数
- 使用Fiddler抓取模拟器APP的请求,并转发到本地调试
- POJ 3531 Alternating Sum of Digits 英文少
- 02、mysql数据类型和列属性
- Codeforces 766 C Mahmoud and a Message(DP)