我有一个ListView,其行包含一些TextView和一个按钮。当用户按下按钮时,我想从ListView中删除包含该按钮的父节点。如何从嵌套方法(onClickListener)中访问自定义ArrayAdapter的字段?我必须使用的是View v。我想多次调用v.getParent(),还是有更好的方法呢?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Action item = this.getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.action_holder_layout,
parent, false);
holder = new ViewHolder();
holder.title = (TextView) convertView
.findViewById(R.id.action_holder_title);
holder.finishBtn = (Button) convertView
.findViewById(R.id.finish_action_button);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.title.setText(item.getActionName());
holder.finishBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//REMOVE THE ACTION FROM THE ADAPTER'S ARRAYLIST
}
});
return convertView;
}
static class ViewHolder {
private TextView title;
private Button finishBtn;
}
答案 0 :(得分:1)
制作item
final
:
final Action item = this.getItem(position);
您可以从onClick
访问它。不是一个美丽的解决方案IMO,但会工作:
remove(item);
答案 1 :(得分:1)
如果您需要访问ListView(及其适配器),比使用getParent().getParent()...
更好的方法是在View上使用setTag()方法。由于您已经使用它将ViewHolder作为视图的标记插入,因此为什么不添加另一个字段
ListView parentListView;
到您的ViewHolder并稍后在onClick中检索它?
您也可以将ListView直接设置为按钮上的标签。
您也可以直接从onClick代码访问适配器或其他方法和字段,因为您使用的是匿名类。