2017-12-18 35 views
0

나는 RadioButton (있는 경우 다른 항목에서 recyclerview 항목의 데이터를 업데이트하는 방법은 무엇입니까?

가 나는 RadioButton가 사용자에 의해 확인 될 때, 내가 다른 선택을 취소 할 정확히 원하는 무엇을, 나는 각 행 항목에 radio button과 몇 가지 다른 견해를 가지고 RecyclerView을 가지고 RecyclerView에 문제가 아무것도 더 일찍 점검됩니다). Recyclerview이므로 radiogroup을 사용할 수 없습니다. 어댑터 onBindViewHolder에서

나는

holder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedPosition = holder.getAdapterPosition(); 
      Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

어떻게 내가 이전 라디오 버튼을 선택을 선택 해제 할 수있는 각 라디오 버튼이 리스너를 쓰기?
즉, 다른 항목보기 수신기에서 recyclerview의 특정 항목에서보기 속성을 어떻게 업데이트 할 수 있습니까?

+1

이 하나 ..https를 참조하십시오 //stackoverflow.com/questions/46344032/how-to-select-just-one를 -radiobutton-recyclerbutton-with-recyclerview-android/46344598 # 46344598 –

+0

@Sanjay Majoka 오, 이것이 내가 원하는 것입니다. 시도해 보니이 훌륭한 도움에 대해 대단히 감사드립니다. – Mosa

답변

2

당신은 사용자가 새로운 라디오 버튼을 확인할 때 어댑터에 전 세계적으로되어 selectedItem에 대한 참조가 다음의 모든 항목을 업데이트해야합니다.

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { 
    private int selectedItemPosition = -1; 
} 

그리고 어댑터의 당신의 onBindViewHolder() 방법 일을,

@Override 
public void onBindViewHolder(final Adapter.ViewHolder holder, int position) { 
    holder.radioButton.setChecked(holder.getAdapterPosition()==selectedItemPosition); 
    holder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedItemPosition = holder.getAdapterPosition(); 
      notifyDataSetChanged(); 
     } 
    }); 
} 
+0

ok greate와 그것은 잘 동작한다. 그러나 내가 모든 항목과 r를 최신의 것으로 바꿀 때 ecyclerview는 몇 초 동안 지연되는 데이터가 많습니다? – Mosa

+0

recyclerview는 한 번에 목록의 모든 항목을 업데이트하지 않습니다. 이름에서 알 수 있듯이, Recyclerview는 목록에 많은 항목을 렌더링하거나 그릴 수 없으며 단지보기를 재사용합니다. 각 항목은 디스플레이 화면에 표시되면 업데이트됩니다. 따라서 지연에 대해 걱정할 필요가 없습니다. – kcg

+0

아아 설명과 설명을 주셔서 감사합니다. – Mosa

1

이 시도 ::

 if (position == selectedPosition) { 
      holder.radioButton.setChecked(true); 
      Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show(); 
     } else { 
      holder.radioButton.setChecked(false); 
     } 

     holder.radioButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       selectedPosition = holder.getAdapterPosition(); 
       notifyDataSetChanged(); 
      } 
     }); 
+0

링크에서 내 요청을 발견했습니다. @Sanjay Majoka는 나에게 그것을 줬다. 그러나 이것은 또 다른 좋은 대답이다. 그리고 그것은 나를 위해 일한다 – Mosa