2012-02-28 13 views
-1

私のリストビューのgetviewで私は別の変数に位置を割り当てています。 私のリスト内にチェックボックスがあります。アンドロイドのリストビュービューの位置を取得

私はcheckboxに対してsetOnCheckedChangeListenerを定義しました。

私はjusのチェック/チェックを外すと、getviewが呼び出されないことがわかります。 しかし、私はgetviewで設定されたpositionの値を使用して、適切な値を与えてくれます。

つまり、10番目の位置をクリックすると、その変数の変数も10になります。

どうか私に説明してください。

私のコードはここで私は、行10のチェックボックスをクリックするとgetViewメソッド 内の位置、oncheckchnagedリスナーが呼び出されますが、ないgetViewメソッド機能 が、私はその参照なっている= POSを設定しています

public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     final int pos = position; 
     barcodeForSelectedRow = productList.get(pos).getBarcode(); 
     formatForSelectedRow = productList.get(pos).getFormat(); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.product_list_row, null); 

      holder = new ViewHolder(); 
      holder.text1 = (TextView) convertView.findViewById(R.id.productid); 

      holder.text2 = (TextView) convertView.findViewById(R.id.price); 
      holder.text2.setOnClickListener(listener); 
      holder.image = (ImageView) convertView 
        .findViewById(R.id.productimageid); 
      holder.check=(CheckBox) convertView.findViewById(R.id.checkbox); 
      convertView.setTag(holder); 
      holder.image.setOnClickListener(listener); 

    } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     // setWishListItemsInScanList(pos, convertView); 
     holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton checkBox, 
        boolean isChecked) { 
       Log.i("CheckBox check", "" + pos); 


     }); 
     return convertView; 
    } 

を下回っていますonchechchangedlistenerで位置が正しく取得されています。 私はその出来事を知りました。

NB:期待通りの動作であるときはいつでもgetviewが呼び出されます。また、チェックボックスをクリックすると、getviewは呼び出されず、正常に動作しています。私の質問は、oncheckchangedlistenerがどのように正しく位置値を取得するかです。

+0

このコードをすべて掲載するのではなく、関連する部分を抽出する必要があります。このプロセスでは、あなたは解決策を見つけるかもしれません... – Kheldar

+0

あなたのコントロールはチェックボックスのonCheckedChange()に入っていません。 – Hiral

+1

onCheckedChangedこのチェックボックスのステータスを変更すると、この関数が呼び出されます。あなたのgetViewメソッドではありません – Triode

答えて

1

特定のビューごとにgetView()が呼び出されるため、setOnCheckedChangeListener()を設定するたびにローカル値 "pos"を渡します。 getview()が呼び出されるたびに、新しい変数 "pos"が作成され、最終的にそれを設定するので、他の方法ではできません。したがって、各setOnCheckedChangeListener()には、 "pos"変数のインスタンスがあります。

+0

はい、それは私の質問に答える。どうもありがとう。 – png

2

getviewが呼び出されていないということを意味しますか? getviewからの位置の使用には注意してください。あなたがスクロールしても、あなたが再開した場合、ポジションはリサイクルされます。

EDIT あなたのコメントへの短い答えはlist.getPositionInView(ビュー表示)です。

+0

ポジションがリサイクルされているとは思えません。変換ビューは各ビューグループに対してリサイクルされます。しかし、位置はスクロールでは変更されません。通常、データ配列/リストからコンテンツを取得するために位置が使用されます。 – png

+0

getview関数が呼び出されていないということはどういう意味ですか?呼び出されていない場合でもアクティビティをロードすべきではありません。ほとんどの場合、空のアクティビティが発生します。ビューがスクロール可能でない場合は、正しい位置のアクティビティに問題はありません。それが事実であれば、活動を一時停止する(家に帰る)。そしてあなたのアイコンから活動に戻り、あなたの位置を確認する。おそらく、あなたのポジションは逆の順番であるか、ポジションの半分しかなく、それぞれが2回呼び出されていることがわかります。 getpositioninview()はより信頼性の高いものになります。 – maebe

+0

getviewは、このアクティビティに来るたびに呼び出されます。これは期待される動作です。また、チェックボックスをクリックすると、getviewは呼び出されず、正常に動作しています。私の質問は、oncheckchangedlistenerがposition値を正しく取得する方法です。また私のビュースクロール – png

関連する問題