如何增加对Android的观点持有者变量的值? [英] How to increment a value on view holder variables in android?

查看:188
本文介绍了如何增加对Android的观点持有者变量的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 viewholder 在我的Andr​​oid应用程序,我想在一个文本框设置增加值。我试图像下面,

活动

  @覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
    如果(convertView == NULL){
        持有人=新的持有人();
        LayoutInflater充气=(LayoutInflater)this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.menu_list_item,NULL);

        holder.textViewItemName =(TextView中)convertView.findViewById(R.id.textViewItemName);
        holder.textViewPrice =(TextView中)convertView.findViewById(R.id.textViewPrice);
        holder.imageView =(ImageView的)convertView.findViewById(R.id.imageViewItem);
        holder.buttonPlus =(ButtonRectangle)convertView.findViewById(R.id.buttonPlus);
        holder.cartQtyTextView =(TextView中)convertView.findViewById(R.id.textViewCartQty);
        holder.buttonMinus =(ButtonRectangle)convertView.findViewById(R.id.buttonMinus);
        convertView.setTag(保持器);
    } 其他 {
        支架=(座)convertView.getTag();
    }
    最终的菜单项的listItem = objects.get(位置);
    holder.textViewItemName.setText(listItem.getItemName());
    holder.textViewPrice.setText($.concat(将String.valueOf(listItem.getItemPrice())));

    //检查和放大器;组
    如果(holder.buttonPlus!= NULL){
        holder.buttonPlus.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){

                如果(holder.cartQtyTextView!= NULL){
                    如果(holder.inc> = 0){
                        holder.cartQtyTextView.setText(将String.valueOf(holder.inc ++));
                    }
                }
            }
        });
    }
    holder.buttonPlus.setBackgroundColor(Color.WHITE);
    holder.buttonPlus.setTextColor(Color.parseColor(#333333));

    //检查和放大器;组
    如果(holder.buttonMinus!= NULL){
        holder.buttonMinus.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                如果(holder.inc> = 0){
                    holder.cartQtyTextView.setText(将String.valueOf(holder.inc--));
                }
            }
        });
    }
    holder.buttonMinus.setBackgroundColor(Color.WHITE);
    holder.buttonMinus.setTextColor(Color.parseColor(#333333));

    返回convertView;

}
 

 类持有人{
    ButtonRectangle buttonPlus;
    ButtonRectangle buttonMinus;
    TextView的cartQtyTextView;
    TextView的textViewItemName;
    TextView的textViewPrice;
    ImageView的ImageView的;
    INT INC;
}
 

但这递增随机。我如何解决这个问题?

解决方案

 >但是,这是递增随机
 

这是因为viewholder可能属于不同的顺序线。

示例

  • 在开始viewholder#1属于订单行#1 INC = 2
  • 如果您向下滚动列表框订单行#1变为不可见和订单行#27变为可见。
  • 现在,订单行#27重用viewholder#1和INC = 2

如何解决这一问题:

您需要存储的数据公司,条款ArticleID,数量,单价,articlename,......

这是objectmodell

 最终订单项订单项=(订单项)objects.get(位置);
 ...
 orderItem.inc ++;
 

另请参见<一个href="http://stackoverflow.com/search?q=listview+random">http://stackoverflow.com/search?q=listview+random

I have a viewholder in my Android app and I tried to set an incremented value on a textfield. I tried it like following,

Activity

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        holder = new Holder();
        LayoutInflater inflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.menu_list_item, null);

        holder.textViewItemName = (TextView) convertView.findViewById(R.id.textViewItemName);
        holder.textViewPrice = (TextView) convertView.findViewById(R.id.textViewPrice);
        holder.imageView = (ImageView) convertView.findViewById(R.id.imageViewItem);
        holder.buttonPlus = (ButtonRectangle) convertView.findViewById(R.id.buttonPlus);
        holder.cartQtyTextView = (TextView) convertView.findViewById(R.id.textViewCartQty);
        holder.buttonMinus = (ButtonRectangle) convertView.findViewById(R.id.buttonMinus);
        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }
    final MenuItem listItem = objects.get(position);
    holder.textViewItemName.setText(listItem.getItemName());
    holder.textViewPrice.setText("$ ".concat(String.valueOf(listItem.getItemPrice())));

    // Check & Set
    if (holder.buttonPlus != null) {
        holder.buttonPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (holder.cartQtyTextView != null) {
                    if (holder.inc >= 0) {
                        holder.cartQtyTextView.setText(String.valueOf(holder.inc++));
                    }
                }
            }
        });
    }
    holder.buttonPlus.setBackgroundColor(Color.WHITE);
    holder.buttonPlus.setTextColor(Color.parseColor("#333333"));

    // Check & Set
    if (holder.buttonMinus != null) {
        holder.buttonMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (holder.inc >= 0) {
                    holder.cartQtyTextView.setText(String.valueOf(holder.inc--));
                }
            }
        });
    }
    holder.buttonMinus.setBackgroundColor(Color.WHITE);
    holder.buttonMinus.setTextColor(Color.parseColor("#333333"));

    return convertView;

}

Holder

class Holder {
    ButtonRectangle buttonPlus;
    ButtonRectangle buttonMinus;
    TextView cartQtyTextView;
    TextView textViewItemName;
    TextView textViewPrice;
    ImageView imageView;
    int inc;
}

But this is incrementing randomly. How may I fix this?

解决方案

 > But this is incrementing randomly

that is because the viewholder may belong to different order-lines.

Example

  • in the beginning viewholder#1 belongs to orderline #1 with inc=2
  • if you scroll down the listbox orderline #1 becomes invisible and orderline #27 becomes visible. .
  • now orderline #27 is reusing viewholder#1 and with inc=2

how to fix this:

you need an objectmodell that store the data inc, articleid, quantity, unitprice, articlename, ......

 final OrderItem orderItem = (OrderItem) objects.get(position);
 ...
 orderItem.inc++;

See also http://stackoverflow.com/search?q=listview+random

这篇关于如何增加对Android的观点持有者变量的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆