2015-09-10 33 views
2

我在我的Android應用程序中有一個viewholder,我嘗試在文本字段上設置遞增值。我試圖像下面,如何在android中增加視圖持有者變量的值?

活動

@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; 

} 

持有人

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

但這是隨機遞增。我該如何解決這個問題?

+0

你是否正在檢查'int'的值與你點擊的位置.. – Mohit

+0

nope。我怎樣才能做到這一點? – codebot

+0

爲什麼你在持有人中創建該公司在活動中聲明 –

回答

3
> But this is incrementing randomly 

這是因爲viewholder可能屬於不同的命令行。

    在開始viewholder#1
  • 屬於訂單行#1 INC = 2
  • 如果你向下滾動列表框訂單項目#1變爲不可見和訂單項目#27變得可見。 。
  • 現在訂購行#27重用viewholder#1,並INC = 2

如何解決這一問題:

你需要存儲數據的公司,條款ArticleID,數量,單價,ArticleName的一個objectmodell, ......

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

https://stackoverflow.com/search?q=listview+random

+0

@codebot請像他說的那樣做。 – Budius

1

看到當你點擊按鈕,它得到的TextView對應於該位置..

  1. OnClick按鈕,得到TextView的你點擊位置..

  2. 的TextViewgetText(),實施條件,以增加/減少你的inc然後setText()TextView

我還建議採取一個局部變量的Adapter類而不是Holder類中,因爲它會很容易操縱它的價值..

0

您還需要設置一個tag的按鈕,如果你想操縱持有人項目。

if (convertView == null) { 
     ... 
     holder.buttonPlus = (ButtonRectangle) convertView.findViewById(R.id.buttonPlus); 
     holder.buttonPlus.setTag(holder); 
     holder.buttonPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Holder current= (Holder) v.getTag(); 
       current.inc=current.inc+1; 
       notifyDataSetChanged(); 
      } 
     }); 
     convertView.setTag(holder); 
    } else { 
     holder = (Holder) convertView.getTag(); 
    }