2016-03-23 10 views
0

私は、recyclerviewアイテムとしてラジオボタンを持つhorizo​​ntal recyclerviewを持っています。現在ラジオボタンを選択していない場合は、ほかのラジオボタンをすべて偽として選択する必要があります。だから私はやった -RecyclerViewの行アイテムビューの位置問題android

View.OnClickListener rbClick = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RadioButton checked_rb = (RadioButton) v; 
      if (lastCheckedRB != null && lastCheckedRB != checked_rb) { 
       lastCheckedRB.setChecked(false); 
      } 

      lastCheckedRB = checked_rb; 


     } 
    }; 

    mainHolder.radioBtnTrip.setOnClickListener(rbClick); 

私は4から5の項目があるとき、それはうまく動作します。しかし、5つ以上のアイテムがある場合は、常にビューのリサイクルのために複数のラジオボタンが選択されます。与えられた写真は、最初のアイテムが選択されていることを示していますが、スクロールすると10番目のラジオボタンが選択されています。行項目の位置の問題を解決する方法

First image

2nd Image

。一度にラジオボタンを1つだけ選択して、recyclerviewの他のすべてのラジオボタンをfalseとして選択する必要があります。

+0

http://stackoverflow.com/questions/27438858/を作成することですcheckbox-in-spinner-adapter-is-automatically-checked-when-i-scroll-it/27438944#27438944この回答で解決できます –

答えて

0
あなたonBindViewHolder方法

@Override 
public void onBindViewHolder(Adapter.ViewHolder viewHolder, int position) { 


    if(this.getItemViewType(position)==1){ 
     // layout #1 
    }else{ 
     // layout #2 
    } 

}

に、ビューの値(または任意の)に基づいて、多くの異なる方法でviewholderをフォーマットする

@Override 
public int getItemViewType(int position) { 

    // example 
    return 0; 

} 

の方法getItemViewTypeをオーバーライド

0

recyclerviewまたはlistviewの仕組みを理解する

bindviewが呼び出されたときに更新されるように、チェックされたステータスをどこかに格納する必要があります。ここでは、チェックされたステータスをtrueに設定できます。

リストビューまたはRecyclerViewは、スクロール時に任意のインデックスからビューを再利用します。

以前に選択した同じビューは、スクロールバックするときに同じインデックス上にあるとは限りません。

0

これを行う簡単な方法は、それぞれのモデルで、次いでonBindViewHolder内部プロパティ()ラジオボタンは、モデルに応じてプロパティをチェックし

関連する問題