我在RadioGroups clearCheck方法和旋转我的应用程序方面有问题。我觉得这可能是谷歌的问题?
我有一个三个按钮的无线电组,在启动时,默认情况下在xml中选择第一个项目。
我的问题是,我有一个按钮调用无线电组clearCheck()。如果您旋转应用程序,然后尝试按下第一个无线电组项目,它将不会选择它。它尝试,它显示动画,但它仍然没有被选中。
我以为我要疯了,我的代码出了点问题,但我把它分解成了最简单的应用程序,只需要做一个新的应用程序。
如果我没有预选Button A(通过XML或代码),那么它可以正常工作,但是我需要预选这个按钮。
知道如何解决这个问题并默认选择A吗?
回购步骤
结果:A台不选择。如果然后按B或C,你可以再次按A,但在那之前不能按。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
Button clearButton = (Button) findViewById(R.id.clearButton);
clearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
radioGroup.clearCheck();
}
});
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:gravity="center"
android:checkedButton="@+id/radioButtonA"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radioButtonA"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="A" />
<RadioButton
android:id="@+id/radioButtonB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="B" />
<RadioButton
android:id="@+id/radioButtonC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="C" />
</RadioGroup>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear"
android:id="@+id/clearButton"
android:layout_below="@+id/searchRadioGroup"
android:layout_centerHorizontal="true"
android:layout_marginTop="114dp" />
</RelativeLayout>
发布于 2015-07-31 11:42:01
旋转时,检查的id由于android:checkedButton="@+id/radioButtonA"
而被重置。
如果有检查按钮,CompoundButton
的onRestoreInstanceState
再次将选中的按钮重置为正确的选中按钮。
相反,如果没有检查按钮,按钮A的onRestoreInstanceState
会将其重置为未选中。RadioGroup
没有处理此场景,因为它不是为处理未检查而设计的。
因此,我们的结果是RadioGroup
跟踪buttonA作为checked,buttonA跟踪自己作为未检查。当您单击buttonA时,检查将被处理,但是由于check()
方法中的短路逻辑,UI不会更新,因为它假设由于id已经匹配它手头的mCheckedId,所以应该已经检查了该按钮:
// don't even bother
if (id != -1 && (id == mCheckedId)) {
return;
}
我想这可以被认为是一个错误,但它最终归结为一些奇怪的设计选择在你这方面。您将其设置为默认为buttonA,这意味着用户在正常情况下不能取消选中任何按钮,然后提供一个清除按钮,使它们处于正常情况下无法达到的非默认状态。因此,有两种可能的解决方案将使您的UI设计选择成为焦点:
1)如果您希望始终有一个选中按钮,请将重置按钮重置为默认状态。
clearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRadioGroup.check(R.id.radioButtonA);
}
});
2)如果您想要有可能没有选中按钮,不要默认为任何东西。
发布于 2019-09-07 04:28:04
我的应用程序有这个问题。我作弊了。我创建了一个新的收音机,但是我选择了它的能见度。在那之后,我把setcheked=(是真的)。
https://stackoverflow.com/questions/31752800
复制相似问题