如何增加对Android的观点持有者变量的值?持有者、变量、观点、Android

2023-09-08 09:52:58 作者:无对象

我有一个 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;
}
 

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

解决方案

 >但是,这是递增随机
 
使用CE查找Android中变量的偏移

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

示例

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

如何解决这一问题:

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

这是objectmodell

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

另请参见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