-1

我有一个基本适配器,基本适配器的 getView() 中有三个视图。2 个文本视图和一个删除按钮。

第一个文本视图是产品名称,第二个文本视图是计数器(从购物车中购买了多少产品),第三个是删除按钮。

比如说,衬衫 2 delete_button 勺子 1 delete_button 餐具 3 delete_button。

现在,问题是当我单击第一个删除按钮时,最后一个 textview 的值会减少。

以下是我的代码。

public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    View v = convertView;

    if(v == null) {

        v = inflater.inflate(R.layout.shop_billing_row_layout, parent, false);

        txt_product_name = (TextView) v.findViewById(R.id.txt_view_product_name);
        txt_count = (TextView) v.findViewById(R.id.txt_count);

        btn_delete = (Button) v.findViewById(R.id.btn_delete_prodcut);

        btn_delete.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                Log.i("Test", "******** position delete: " + position);



                if(array_list_products.get(position).getCounter() > 0) {


                    if(array_list_products.get(position).getCounter() != 1) {

                        array_list_products.get(position).setCounter(array_list_products.get(position).getCounter() - 1);

                        txt_count.setText("");
                        txt_count.setText("" + (array_list_products.get(position).getCounter() - 1));

                    }
                }

            }
        });

我认为问题在于文本视图位于最后一个位置,并且我正在单击位于第一个位置的删除按钮,因此最后一个文本视图的值正在递减。

4

3 回答 3

1

what you can try is setting the tag of position on the button

   btn_delete.setTag(position);
btn_delete.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                Log.i("Test", "******** position delete: " + position);


                int pos=(int)arg0.getTag();
                if(array_list_products.get(pos).getCounter() > 0) {


                    if(array_list_products.get(pos).getCounter() != 1) {

                        array_list_products.get(position).setCounter(array_list_products.get(pos).getCounter() - 1);

                        txt_count.setText("");
                        txt_count.setText("" + (array_list_products.get(pos).getCounter() - 1));

                    }
                }

            }
        });
于 2013-05-29T05:42:32.130 回答
0

在 setOnClickListener() 中,

  • 不要调用任何 txt_count.setText()
  • do array_list_products.get(position).setCounter(array_list_products.get(position).getCounter() - 1)) //你需要在你的产品类中实现 setCounter()
  • 调用 notifyDataSetInvalidated()

在 getView() 中,

  • 调用 txt_count.setText(array_list_products.get(position))
于 2013-05-29T05:40:57.067 回答
0
// List view recycle the view so set tag to delete button so that we get the clicked position


   @Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView == null) {
        holder = new ViewHolder();

        convertView = inflater.inflate(R.layout.shop_billing_row_layout, parent, false);

        holder.txt_product_name = (TextView) convertView.findViewById(R.id.txt_view_product_name);
        holder.txt_count = (TextView) convertView.findViewById(R.id.txt_count);

        holder.btn_delete = (Button) convertView.findViewById(R.id.btn_delete_prodcut);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    // initialize your text and data
     holder.txt_count.setText("Hello");

     holder.btn_delete.setTag(position);

     holder.btn_delete.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            int clickedPosition = (Integer) v.getTag();

            if(array_list_products.get(clickedPosition).getCounter() > 0) {
                 if(array_list_products.get(clickedPosition).getCounter() != 1) {
                     array_list_products.get(clickedPosition).setCounter(array_list_products.get(clickedPosition).getCounter() - 1);

                        holder.txt_count.setText("");
                        holder.txt_count.setText("" + (array_list_products.get(clickedPosition).getCounter() - 1));

                 }
            }

        }
    });
    return convertView;
}

public static class ViewHolder {
    TextView txt_product_name;
    TextView txt_count;
    Button  btn_delete;
}
于 2013-05-29T05:53:37.660 回答