android中listView的Button监听

时间:2021-10-19 17:15:47

最近在做android项目时,发现要在listView用到Button等各种点击事件。经过各种百度,发现有两个简单的方法实现,下面为大家分享一下:

第一种方法:

这个方式最简单,最实用的方法了。主要实用的方法就是:自定义adapter,然后把getView的第一个参数 前面加上 final;就可以在adapter中使用Button btn = (Button) convertView.findViewById(R.id.button1);方法,同样也可是使用btn.setOnClickListener(new View.OnClickListener() 的方法。

附上重要的代码:

//把方法改成 final int position 就好了
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.item, null);
}
Button btn = (Button) convertView.findViewById(R.id.button1);
btn.setText(list.get(position).get("name"));
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"点击 " + list.get(position).get("name"),
Toast.LENGTH_SHORT).show();
}
});
return convertView;
}



    第二种方法:

           主要是自定义adapter和自定义监听,可以实现button ,listView同时监听
          注意:实现同时监听,必须把button(有取得焦点的东西)设置为false,可以在xml里面设置,也可以在adapter中设置
          例如:holder.btn.setFocusable(false);

           

附上重要的代码:

        class ViewHolder {

Button btn;
}

     

自定义adapter的getView方法

               @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.item, null);
holder = new ViewHolder();
holder.btn = (Button) convertView.findViewById(R.id.button1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btn.setText(list.get(position).get("name"));
holder.btn.setFocusable(false);
holder.btn.setOnClickListener(new lvButtonListener(position));
return convertView;
}

           // 自定义listView中监听类
class lvButtonListener implements OnClickListener {
private int position;


lvButtonListener(int pos) {
position = pos;
}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub


if ((v.getId()) == (holder.btn.getId())) {
Toast.makeText(testDemo2.this,
"点击button " + list.get(position).get("name"),
Toast.LENGTH_SHORT).show();
}
}
}

注意:要同时使用 listView,button的点击事件,必须把button(获得焦点的关闭掉)

源码地址:  http://download.csdn.net/detail/ming54864/7693109