最近在做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