У меня есть список; Список, который я изменил с помощью настраиваемого адаптера, и Мой настраиваемый адаптер состоит из радиогруппы, состоящей из четырех переключателей.
Итак, для каждого элемента списка есть четыре радиокнопки. Я хочу показать другое тостовое сообщение в зависимости от выбора радиокнопки. Как я могу это сделать?
как обрабатывать разные радиокнопки разных элементов списка? Я создал список с помощью специального адаптера. Теперь не получается.
Я добавил ответ, который должен помочь
Вы попробовали мой ответ?
Попробуйте следующее:
Demo10.class ------------
public class Demo10 extends AppCompatActivity implements Listener {
private ListView lv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo11);
lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new ItemAdapter(Demo10.this , this));
}
@Override
public void RadioButton1(String text) {
Toast.makeText(getApplicationContext() , text , Toast.LENGTH_LONG).show();
}
@Override
public void RadioButton2(String text) {
Toast.makeText(getApplicationContext() , text , Toast.LENGTH_LONG).show();
}
@Override
public void RadioButton3(String text) {
Toast.makeText(getApplicationContext() , text , Toast.LENGTH_LONG).show();
}
@Override
public void RadioButton4(String text) {
Toast.makeText(getApplicationContext() , text , Toast.LENGTH_LONG).show();
}
}
ItemAdapter.class ---------
public class ItemAdapter extends BaseAdapter {
private Context mContext;
private LayoutInflater layoutInflater;
private Listener callback;
private String[] q = {
"Q1",
"Q2",
"Q3",
"Q4"
};
private String[] a1 = {
"a1(1)",
"a1(2)",
"a1(3)",
"a1(4)"
};
private String[] a2 = {
"a2(1)",
"a2(2)",
"a2(3)",
"a2(4)"
};
private String[] a3 = {
"a3(1)",
"a3(2)",
"a3(3)",
"a3(4)"
};
private String[] a4 = {
"a4(1)",
"a4(2)",
"a4(3)",
"a4(4)"
};
public ItemAdapter(Context c , Listener l) {
mContext = c;
callback = l;
layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return q.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
RadioGroup rg;
RadioButton rb1;
RadioButton rb2;
RadioButton rb3;
RadioButton rb4;
TextView tv;
View view = convertView;
if (convertView == null) {
if (layoutInflater != null) {
view = layoutInflater.inflate(R.layout.demo10, null);
}
}
tv = (TextView) view.findViewById(R.id.tv);
tv.setText(q[position]);
rg = (RadioGroup) view.findViewById(R.id.rg);
rb1 = (RadioButton) view.findViewById(R.id.rb1);
rb2 = (RadioButton) view.findViewById(R.id.rb2);
rb3 = (RadioButton) view.findViewById(R.id.rb3);
rb4 = (RadioButton) view.findViewById(R.id.rb4);
rb1.setText(a1[position]);
rb2.setText(a2[position]);
rb3.setText(a3[position]);
rb4.setText(a4[position]);
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton rb = group.findViewById(checkedId);
switch (checkedId){
case R.id.rb1:
callback.RadioButton1(rb.getText().toString());
break;
case R.id.rb2:
callback.RadioButton2(rb.getText().toString());
break;
case R.id.rb3:
callback.RadioButton3(rb.getText().toString());
break;
case R.id.rb4:
callback.RadioButton4(rb.getText().toString());
break;
}
}
});
return view;
}
}
Интерфейс слушателя: ---------
public interface Listener {
public void RadioButton1(String text);
public void RadioButton2(String text);
public void RadioButton3(String text);
public void RadioButton4(String text);
}
demo11.xml: --------
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent"
android:layout_height = "match_parent">
<ListView
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:id = "@+id/lv">
</ListView>
</android.support.constraint.ConstraintLayout>
demo10.xml: -----
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout
xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical">
<TextView
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text = "Question"
android:layout_marginStart = "5dp"
android:layout_marginBottom = "10dp"
android:id = "@+id/tv"/>
<RadioGroup
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:id = "@+id/rg"
android:checkedButton = "@+id/sound" >
<RadioButton
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:id = "@+id/rb1"
android:text = "1" />
<RadioButton
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:id = "@+id/rb2"
android:text = "2" />
<RadioButton
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:id = "@+id/rb3"
android:text = "3" />
<RadioButton
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:id = "@+id/rb4"
android:text = "4" />
</RadioGroup>
</LinearLayout>
Вам нужно добавить слушателя в «OnCheckedChanged» и показать тост внутри слушателя.
Этот слушатель должен быть добавлен к методу public View getView(int position, View convertView, ViewGroup parent) вашего адаптера.
Это должно помочь:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = LayoutInflater.from(context).inflate(R.layout.radiobutton_list_view_item, parent, false);
final RadioButton rbt = convertView.findViewById(R.id.rbtOption);
/*
Here you do whatever you need (setting radiobutton's name, tag, etc.)
*/
rbt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
Toast.makeText(context, "Selected radiobutton " + rbt.getTag(), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
setOnCheckedChangeListener мне помог. Я использовал его для группы радиокнопок, и теперь моя цель выполнена.
Большой! Я рада помочь
что ты уже испробовал? Обработайте событие каждого переключателя, чтобы отобразить тост.