如何在适配器中单击listview项目时更新文本

时间:2016-01-05 12:56:15

标签: android

enter image description here我希望如果用户点击+和 - 按钮,则会对listview中的特定列表项执行操作。在我的程序中,当我点击第一个项目的按钮然后值增加和减少但是当另一个项目按钮点击时,它考虑先前的项目值和对该值执行的激励和减少动作。我希望每个项目单独执行它们。我不知道如何实现这个。

这是我的代码:

public static class ViewHolder {
        TextView tv_qty;
    }

    public class ProductAdapter extends ArrayAdapter<Product>  {
        ImageLoader imageLoader;
        public ProductAdapter(Context context, int resource) {
            super(context, resource);
            imageLoader = new ImageLoader(context);
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            Product product = getItem(position);
         //   Product product=ge
            View view;
            if (convertView == null) {
                LayoutInflater layoutInflater = LayoutInflater.from(getContext());
                view = layoutInflater.inflate(R.layout.product_row, null);
            } else {
                view = convertView;
            }
            final ViewHolder viewHolder = new ViewHolder();
            tv_row_product_name = (TextView) view.findViewById(R.id.pname);
            tv_row_product_rate = (TextView) view.findViewById(R.id.price);
            tv_row_product_qty = (TextView) view.findViewById(R.id.productqty);
            viewHolder. tv_qty = (TextView) view.findViewById(R.id.userqty);
            tv_value = (TextView) findViewById(R.id.textView_value);
            tv_totalprice = (TextView) findViewById(R.id.textview_totalprice);
            ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
            Log.d(Config.tag, "url : " + "uploads/product/" + product.image1);
            Picasso.with(ListViewProduct.this)
                    .load("http://www.sureshkirana.com/uploads/product/" + product.image1)
                    .into(imageView);
            imgbtnp = (ImageButton) view.findViewById(R.id.imageButton2);
            imgbtnm = (ImageButton) view.findViewById(R.id.imageButton);
            imgbtnp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    count++;
                   viewHolder. tv_qty.setText(String.valueOf(count));
                    notifyDataSetChanged();
                }
            });
            imgbtnm.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (count > 0)
                        count--;
                       viewHolder.tv_qty.setText(String.valueOf(count));
                    notifyDataSetChanged();
                }
            });
            view.setTag(viewHolder);
            tv_row_product_name[enter image description here][1].setText(product.productTitle);
            tv_row_product_rate.setText("Rs. " + product.productPrice + "/-");
            tv_row_product_qty.setText(product.quantity + "kg");
            tv_totalprice.setText("Rs." + product.product_amount);
            return view;
          }
    }
}

3 个答案:

答案 0 :(得分:0)

您不能为此目的使用单个变量。将计数设置为列表项viewHolder.tv_qty.setTag(count);的标记 并检索viewHolder.tv_qty.getTag();之类的值。

答案 1 :(得分:0)

单击+或 - 符号获取getView中单击项的位置,并获取该位置的产品对象并使用新值进行修改,并再次将修改后的对象放在相同位置的同一列表中,并调用notifyDatasetChanged( )。希望它有所帮助。

答案 2 :(得分:-1)

使用Interface可以解决此问题。您需要更新对象,然后使用notifyDataSetChanged()刷新列表适配器。

自定义适配器

public interface QuantityClickListener {
    void onIncrementClickListner(int position);

    void onDecrementClickListner(int position);
}

/*
 * (non-Javadoc)
 * 
 * @see android.widget.ArrayAdapter#getView(int, android.view.View,
 * android.view.ViewGroup)
 */
@SuppressLint("InflateParams")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ListViewWrapper wrapper = null;
    LayoutInflater inflater = LayoutInflater.from(mContext);
    if (null == convertView) {
        convertView = inflater.inflate(R.layout.custom_list_item, null);
        wrapper = new ListViewWrapper(convertView);
        convertView.setTag(wrapper);
    } else {
        wrapper = (ListViewWrapper) convertView.getTag();
    }
    // Schedule schedule = objects.get(position);
    Products product = mProducts.get(position);
    if (null != product) {
        wrapper.getTxtQuantity().setText("" + product.quantity);

        wrapper.getNegativeBtn().setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                quantityClickListener.onDecrementClickListner(position);
            }
        });

        wrapper.getPositiveBtn().setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                quantityClickListener.onIncrementClickListner(position);
            }
        });
    }
    return convertView;
}

<强>活动

/**
 * Initialize UI elements
 */
private void initialize() {
    listView = (ListView) findViewById(R.id.listview);
    dummyData();
    adapters = new CustomAdapters(this, 0, products);
    adapters.setQuantityClickListener(quantityClickListener);
    listView.setAdapter(adapters);
}

private QuantityClickListener quantityClickListener = new QuantityClickListener() {

    @Override
    public void onIncrementClickListner(int position) {
        if (null != products && products.size() > 0) {
            Products product = products.get(position);
            product.quantity++;
            product.totalPrice = product.quantity * product.price;
            adapters.notifyDataSetChanged();
        }
    }

    @Override
    public void onDecrementClickListner(int position) {
        if (null != products && products.size() > 0) {
            Products product = products.get(position);
            if (product.quantity > 0) {
                product.quantity--;
                product.totalPrice = product.quantity * product.price;
                adapters.notifyDataSetChanged();
            }
        }
    }
};