我有这样的情况,我有一个具有4个单选按钮组的布局,每个单选按钮组有2个单选按钮。如何使4个无线电组彼此同步。选中单选组1上的单选按钮时,未选中单选组2中的单选按钮吗?
这是我的XML代码:
.scss.css
我尝试使用此代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_margin="20sp"
android:textSize="25sp"
android:fontFamily="monospace"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/judulkolomtes"/>
<TableLayout
android:layout_margin="10sp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@drawable/border_white">
<RadioGroup
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="horizontal">
<TextView
android:padding="10sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/P"
android:textStyle="bold"
android:textAlignment="center"
android:textSize="18sp"
android:textColor="@color/white"/>
<TextView
android:padding="10sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/K"
android:textStyle="bold"
android:textAlignment="center"
android:textSize="18sp"
android:textColor="@color/white"/>
</RadioGroup>
<TextView
android:padding="10sp"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:text="@string/pernyataanhead"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="@color/white"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@drawable/border_black">
<RadioGroup
android:id="@+id/Rgroup1"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/Pradio1"
android:checked="false"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
<RadioButton
android:id="@+id/Kradio1"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
</RadioGroup>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingTop="2dp"
android:text="@string/pernyataan1"
android:textSize="19sp"
android:textColor="@color/black"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border_black"
android:orientation="horizontal">
<RadioGroup
android:id="@+id/Rgroup2"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_gravity="center"
android:id="@+id/Pradio2"
android:checked="false"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
<RadioButton
android:layout_gravity="center"
android:id="@+id/Kradio2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
</RadioGroup>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingTop="2dp"
android:text="@string/pernyataan2"
android:textSize="19sp"
android:textColor="@color/black"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@drawable/border_black">
<RadioGroup
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/Pradio3"
android:layout_gravity="center"
android:checked="false"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
<RadioButton
android:id="@+id/Kradio3"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
</RadioGroup>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingTop="2dp"
android:text="@string/pernyataan3"
android:textSize="19sp"
android:textColor="@color/black"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@drawable/border_black">
<RadioGroup
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/Pradio4"
android:layout_gravity="center"
android:checked="false"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
<RadioButton
android:id="@+id/Kradio4"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/border_black"/>
</RadioGroup>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingTop="2dp"
android:text="@string/pernyataan4"
android:textSize="19sp"
android:textColor="@color/black"/>
</TableRow>
</TableLayout>
,但结果与我预期的不同。当我在无线电组1上检查单选按钮时,然后在无线电组2中检查了单选按钮。无线电组1中的单选按钮变为未选中状态,但是当我想再次检查无线电组1中的单选按钮时,则无法检查单选按钮,在无线电组2中也可以使用单选按钮。 有解决这个问题的办法吗?根据我的分析,当选中另一个单选按钮时,将单选按钮设置为false,这将导致单选按钮无法检查。
答案 0 :(得分:0)
这是解决方案。
public class MainActivity extends AppCompatActivity {
List<RadioButton> radioButtons;
List<RadioGroup> radioGroups;
boolean flg = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RadioButton pradio1 = (RadioButton) findViewById(R.id.Pradio1);
final RadioButton pradio2 = (RadioButton) findViewById(R.id.Pradio2);
final RadioButton pradio3 = (RadioButton) findViewById(R.id.Pradio3);
final RadioButton pradio4 = (RadioButton) findViewById(R.id.Pradio4);
final RadioButton kradio1 = (RadioButton) findViewById(R.id.Kradio1);
final RadioButton kradio2 = (RadioButton) findViewById(R.id.Kradio2);
final RadioButton kradio3 = (RadioButton) findViewById(R.id.Kradio3);
final RadioButton kradio4 = (RadioButton) findViewById(R.id.Kradio4);
final RadioGroup rgroup1 = (RadioGroup) findViewById(R.id.Rgroup1);
final RadioGroup rgroup2 = (RadioGroup) findViewById(R.id.Rgroup2);
final RadioGroup rgroup3 = (RadioGroup) findViewById(R.id.Rgroup3);
final RadioGroup rgroup4 = (RadioGroup) findViewById(R.id.Rgroup4);
radioButtons = new ArrayList<RadioButton>();
radioButtons.add(pradio1);
radioButtons.add(pradio2);
radioButtons.add(pradio3);
radioButtons.add(pradio4);
radioButtons.add(kradio1);
radioButtons.add(kradio2);
radioButtons.add(kradio3);
radioButtons.add(kradio4);
radioGroups = new ArrayList<RadioGroup>();
radioGroups.add(rgroup1);
radioGroups.add(rgroup2);
radioGroups.add(rgroup3);
radioGroups.add(rgroup4);
Log.e("JK->",""+ ((RadioGroup) pradio1.getParent()).getId());
for (RadioButton button : radioButtons) {
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Log.e("JK->","JK");
processRadioButtonClick(buttonView);
}
}
});
}
}
private void processRadioButtonClick(CompoundButton buttonView) {
for (RadioGroup radioGroup: radioGroups){
if (radioGroup.getId() != ((RadioGroup) buttonView.getParent()).getId()) {
radioGroup.clearCheck();
}
}
}
}
在Android中无法取消选中RadioButton
。您试图使用setChecked(false)取消选中RadioButton
。在内部类(Android的RadiooButton类)中行为异常。它在视觉上而不是在逻辑上取消了单选按钮的检查(尽管我是从RadioButton行为获得的)。这就是为什么您的代码无法正常工作的原因。
为了解决此问题,而不是使用setChecked(false)取消选中RadioButton,我使用了radioGroup.clearCheck()
来取消选中该特定组的两个按钮(在视觉上和逻辑上两个)。我不确定这是否是明确的解释。如果您有任何疑问,请告诉我。 :)