2017-03-20 73 views
0

我創建了一個應用程序,我想執行一個任務喜歡添加值並通過單擊按鈕減少值。它工作正常,但我面臨的問題是當我滾動列表視圖然後價值是零0 0.ListView Items(TextView)每次重新加載時滾動

但是,當我點擊增加按鈕或減少按鈕然後它給了我真正的價值。

即:當我添加2個數量。通過點擊。

,當我滾動頁面,然後就會變成0,當我在Add按鈕點擊後將給了我3

,或者當我滾動頁面,然後就會變成0,當我點擊減號按鈕它將給我1

當我滾動它離開它的TextView displayInteger被丟棄並忘記它的值。

這裏的完整代碼: -

listViewadapter.java

@Override 
public long getItemId(int position) { 
    return position; 
} 

    public View getView(final int position, View convertView, ViewGroup parent) { 

     TextView mname , pmethod2, pamount3, premark4; 
     final ImageView increase,decrease; 
     final Button add; 
     inflater = (LayoutInflater) cntx 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     LayoutInflater inflater = LayoutInflater.from(cntx); 

     convertView = inflater.inflate(R.layout.raw_order, parent, 
       false); 
     decrease = (ImageView) convertView.findViewById(R.id.decrease); 
     increase= (ImageView) convertView.findViewById(R.id.increase); 
     add= (Button) convertView.findViewById(R.id.add); 

     mname = (TextView) convertView.findViewById(R.id.mname); 
     mname.setText(" " + o_aproduct.get(position)); 


     final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number); 
     //add.setText(" " +count); 

     increase.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int count = sia.get(position); 
       count= count + 1; 
       sia.put(position, count); 
       displayInteger.setText("" + count); 
       add.setText(" " +count); 

       if (count > 0) { decrease.setEnabled(true); } 
      } 
     }); 
     decrease.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int count = sia.get(position); 
       count= count- 1; 
       sia.put(position, count); 
       displayInteger.setText("" + count); 
       add.setText(" " +count); 
       if (count > 0) 
       {decrease.setEnabled(true);} 
       else if (count == 0){ 
        decrease.setEnabled(false); 
       } 
       else { decrease.setEnabled(false);} 
      } 
     }); 




     return convertView; 
    } 
+0

使用recylerview而不是列表視圖 –

+0

的我需要只用..所有的 – Andie

+0

首先不使用可重複使用的概念,這就是爲什麼你得到這樣的問題ListView控件執行此任務。所以首先使用它可重用,然後創建一個模型並存儲舊的計數值。所以請看看這個視頻,它是用適配器解釋列表視圖,希望它能幫助你。 ** [使用自定義適配器的ListView](https://www.youtube.com/watch?v=UMSdD05NVYQ)** –

回答

1

隨着ListView(或RecyclerView),事件偵聽器應該永遠不變的視圖。

事件監聽器應更新模型,然後調用notifyDataSetChanged()notifyDataSetChanged()告訴ListView從您的更新模型刷新。

只能直接在getView()內對視圖進行更改。

final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number); 
    int count = sia.get(position); 
    displayInteger.setText("" + count); 
    decrease.setEnabled(count > 0); 

    increase.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int count = sia.get(position); 
      count++; 
      sia.put(position, count); 
      notifyDataSetChanged(); 
     } 
    }); 
    decrease.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int count = sia.get(position); 
      count--; 
      sia.put(position, count); 
      notifyDataSetChanged(); 
     } 
    }); 
+0

其工作非常感謝你.. – Andie

相關問題