2017-03-20 6 views
0

私は、値を追加し、button.Clickをクリックして値を減少させるようなタスクを実行したいアプリケーションを作成したときListView Items(TextView)は毎回読み込み中ですが、うまくいきますが、私が直面している問題リストビューをスクロールすると値は0になります。スクロール

しかし、私が増加ボタンまたは減少ボタンをクリックすると、私に真の値が与えられます。

:つまり、2を追加した場合。クリックして。

と私はページをスクロールしたとき、それは0になり、私はaddButtonをクリックしたとき、それは意志私に3

を与えるか、私はページをスクロールしたとき、それが0になり、私はマイナスボタン、それをクリックしたときTextView displayIntegerが破棄されてその値が忘れられたときにスクロールすると、1

が返されます。

ここでは、完全なコード: - ListView(またはRecyclerView)で

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

まずthatsの。だから最初に再利用可能なし、モデルを作成し、古いカウント値を格納します。だから親切にこのビデオを見て、それはそれがあなたを助けることを望むアダプタのリストビューを説明されています。 ** [カスタムアダプタを使用したListView](https://www.youtube.com/watch?v=UMSdD05NVYQ)** –

答えて

1

、イベントリスナーは、ビューを変更することはありません。

イベントリスナーはモデルを更新し、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

関連する問題