Android 控制自定义列表视图中的按钮


@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Holder holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.receiptlistsample, null);
    holder.product=(TextView) rowView.findViewById(R.id.product);
    holder.quantity=(TextView) rowView.findViewById(R.id.quan);
    holder.price=(TextView) rowView.findViewById(R.id.price);
    holder.add = (ImageButton)rowView.findViewById(R.id.plus);
    holder.cancel = (ImageButton)rowView.findViewById(R.id.minus);
    holder.product.setText(pro[position]);
    holder.quantity.setText(quant[position]);
    holder.price.setText(pri[position]);
    holder.add.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
               Toast.makeText(context, "add ", Toast.LENGTH_LONG).show();
        }
    });
    holder.cancel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, "cancel ", Toast.LENGTH_LONG).show();
        }
    });
    return rowView;
}}
我在使用列表视图的自定义适配器

时遇到问题,该适配器具有带有文本视图的自定义布局以及两个按钮添加和取消。我想在按下添加或取消按钮后从主活动调用方法。吐司工作正常,但我不能调用方法。

这样做首先

创建接口

public interface GetData {
    public void getvalue(String flag);
}

现在通过适配器调用传递它

mAdapter = new SearchAdapter(Search_Data.this, eventlistsubcat, new GetData() {
                    @Override
                    public void getvalue(String flag) {
                        strlistner=flag.toString();
                      if(strlistner.equals("add")){
                        //call your add method
                        }
                    }
                });

在适配器类中

声明接口的对象

 GetData listner;

并在构造函数中初始化

 public SearchAdapter(Context mContext, ArrayList<abx_Detail> feedItemList, GetData listner) {
        this.mContext = mContext;
        this.feedItemList = feedItemList;
        this.listner=listner;
        itemcheck = new boolean[feedItemList.size()];
    }

像这样点击你的按钮调用

listner.getvalue(flag);

因此,根据主活动中的标志值检查或调用方法。 你在哪里称呼你适配器