单击按钮从ListView中删除行

时间:2013-09-16 22:02:04

标签: android listview button onclick android-arrayadapter

我有一个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;
  }

2 个答案:

答案 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代码访问适配器或其他方法和字段,因为您使用的是匿名类。