0

我有一个 ListView,其行由一些 TextViews 和一个按钮组成。在用户按下按钮后,我想从 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;
  }
4

2 回答 2

1

制作item final

final Action item = this.getItem(position);

您可以从onClick. IMO 不是一个漂亮的解决方案,但会起作用:

remove(item);
于 2013-09-16T22:18:03.820 回答
1

如果您需要访问您的 ListView(以及它的适配器),比使用更好getParent().getParent()...的方法是在您的视图上使用 setTag() 方法。既然您已经在使用它来插入 ViewHolder 作为视图的标记,为什么不添加另一个字段

ListView parentListView;

到您的 ViewHolder 并稍后在 onClick 中检索它?

您还可以将 ListView 直接设置为按钮上的标签。

由于您使用的是匿名类,因此您也可以直接从您的 onClick 代码访问适配器或其他方法和字段。

于 2013-09-16T22:22:29.277 回答