Android ListView中Item点击事件失效解决方案

属性的值有三种:

beforeDescendants:viewgroup会优先其子类控件而获取到焦点

afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

解决方法

1、通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了。

ps:有时我们的List也不想显示出分割线时,可以通过以下属性来设置:


android:divider="#00000000"  

android:dividerHeight="0dip" 

2、被点击的控件如ImageButton中添加属性android:focusable=“false”

优化的listView代码写法


import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;



public class MyAdapter extends BaseAdapter {

	private Context mContext;

	private List<ErrorDataBean> mList = new ArrayList<ErrorDataBean>();



	public MyAdapter(Context mContext, List<ErrorDataBean> mList) {

		super();

		this.mContext = mContext;

		this.mList = mList;

	}



	@Override

	public int getCount() {

		// TODO 自动生成的方法存根

		return mList.size();

	}



	@Override

	public Object getItem(int position) {

		// TODO 自动生成的方法存根

		return mList.get(position);

	}



	@Override

	public long getItemId(int position) {

		// TODO 自动生成的方法存根

		return position;

	}



	@Override

	public View getView(int position, View convertView, ViewGroup parent) {

		final ViewHolder viewHolder;

		final int index=position;

		if (convertView == null) {

			viewHolder = new ViewHolder();

			convertView = LayoutInflater.from(mContext).inflate(

					R.layout.list_item, null);

			viewHolder.tv1 = (TextView) convertView.findViewById(R.id.tv1);

			viewHolder.tv2 = (TextView) convertView.findViewById(R.id.tv2);

			viewHolder.tv3 = (TextView) convertView.findViewById(R.id.tv3);

			viewHolder.bt1 = (Button) convertView.findViewById(R.id.bt1);

			viewHolder.bt2 = (Button) convertView.findViewById(R.id.bt2);

			

			convertView.setTag(viewHolder);

		} else {

			viewHolder = (ViewHolder) convertView.getTag();

		}

		// 用bean 来填充数据

        viewHolder.tv1.setText(mList.get(position).getErrorContent());

        viewHolder.tv2.setText(mList.get(position).getRightAns());

        viewHolder.tv3.setText(mList.get(position).getErrorSolution());

		viewHolder.bt1.setOnClickListener(new OnClickListener() {



			@Override

			public void onClick(View v) {

				// TODO 自动生成的方法存根

				viewHolder.tv3.setText(mList.get(index).getErrorSolution());

				Toast.makeText(mContext, "" + v.getId(), 0).show();

			}

		});

		viewHolder.bt2.setOnClickListener(new OnClickListener() {



			@Override

			public void onClick(View v) {

				// TODO 自动生成的方法存根

				viewHolder.tv3.setText(mList.get(index).getErrorPrompt());

				Toast.makeText(mContext, "" + v.getId(), 0).show();

			}

		});

		return convertView;

	}



	final static class ViewHolder {

		TextView tv1, tv2,tv3;

		Button bt1, bt2;

	}

}

有时一些代码段真的很容易忘记,比如常用的ScrollView嵌套listView的,要屏蔽listview的滑动


public class ListViewNoScroll extends ListView {

    public ListViewNoScroll(Context context) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值