MAY*_*3AM 2 android listview onclicklistener
我有一个扩展BaseAdapter的自定义列表适配器.我创建了一个holder类来标记我的视图,以避免夸大已经存在的视图.
static class ViewHolder{
TextView tvName;
TextView tvDescription;
Button btAdd;
}
Run Code Online (Sandbox Code Playgroud)
在我的getView中我有这样的事情:
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
ViewHolder holder = null;
if(vi == null){
vi = inflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.tvName = (TextView)vi.findViewvById(R.id.name);
holder.tvDescription = (TextView)vi.findViewvById(R.id.desc);
holder.btAdd = (Button)vi.findViewvById(R.id.btnadd);
}else{
holder = (ViewHolder) vi.getTag();
}
holder.btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
holder.btnAdd.startAnimation(scale);
holder.tvName.setVisibility(View.GONE);
}
});
return vi;
}
Run Code Online (Sandbox Code Playgroud)
但eclipse从"holder.btnAdd.startAnimation(scale);"获得错误.并说持有人应该是最后的......
我该如何解决?
你应该得到view与onClick方法如下:
holder.btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.startAnimation(scale);
}
});
Run Code Online (Sandbox Code Playgroud)
您View v在onClick方法中传递参数.然后,您的方法将附加到您的情况下的视图:holder.btnAdd因此v == holder.btnAdd
更新
我解决这个问题的做法有点愚蠢.这真的很容易,确实你初始化viewHolder,null但你不应该.这就是为什么你不能让你viewHolder的final:
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder; // without initialized
if(vi == null){
vi = inflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.tvName = (TextView)vi.findViewvById(R.id.name);
holder.tvDescription = (TextView)vi.findViewvById(R.id.desc);
holder.btAdd = (Button)vi.findViewvById(R.id.btnadd);
}else{
holder = (ViewHolder) vi.getTag();
}
holder.btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.startAnimation(scale);
holder.tvName.setVisibility(View.GONE);
}
});
return vi;
}
Run Code Online (Sandbox Code Playgroud)
而已!
| 归档时间: |
|
| 查看次数: |
7303 次 |
| 最近记录: |