0

私はRecyclerViewを使って国のラジオボタンのリストを表示し、ユーザーが自分の国を選択できるようにします。私はクリックしたアイテム以上のものを望んでいないので、アダプタのonBindViewメソッドでこのOnCheckListenerを書きましたが、RadioButtonをクリックするたびにいくつかのボタンが切り替わります。RadioButton "A"をクリックするとラジオボタン "B"が切り替わりますRecyclerView

@Override 
    public void onBindViewHolder(final com.example.ameer.ta7adialma3rifa.adapters.CountriesAdapter.ViewHolder holder, final int position) { 
     String name = mData.get(position).getName(); 
     int imgId = mData.get(position).getImageId(); 
     holder.radioButton.setText(name); 
     holder.flagImageView.setImageResource(imgId); 
     holder.radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
       RadioButton button = (RadioButton) compoundButton; 
       if (!button.getText().equals(mData.get(position).getName())){ 
        button.setChecked(false); 
       } 
       if (runnable != null){ 
        runnable.run(); 
       } 
       runnable = new Runnable() { 
        @Override 
        public void run() { 
         holder.radioButton.setChecked(false); 
        } 
       }; 
      } 
     }); 
    } 
+0

runnableの使用は何ですか? – Munir

+0

Runnableを削除します。あなたの 'holder.radioButton.setChecked(false);'はRunnable上で実行されるので、recyclerview項目の位置が乱されます。 –

+0

実行可能ファイルは、以前にチェックされたボタンのチェックを外すために使用されます。ボタンをクリックすると、前に選択したボタンの選択が解除され、チェックされたボタンが1つに制限されます。 –

答えて

0

ラジオボタンをラジオグループに配置する必要があります。このようにして、そのうちの1人だけが選ばれています。私はなぜラジオボタンをチェックするためにrunnableを使用しているのかわかりません!これがあなたに役立つことを願っています

+0

実際には、多くの国があり、RadioGroupを使用するとoutOfMemoryExeptionにつながるので、recyclerViewを使用する必要があります –

関連する問題