在 RadioButton 上使用 OnCheckedChangeListener 反向显示/隐藏布局
Reverse show / hide of layouts with OnCheckedChangeListener on a RadioButton
代码
对于我的应用程序中的结帐,我让用户通过在 RadioButton 组中选择来决定他想要使用的付款方式:
<RadioGroup
android:id="@+id/payment_method"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio_prepaid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="prepaid"
android:tag="prepaid"
/>
<RadioButton
android:id="@+id/radio_creditcard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="creditcard"
android:textAllCaps="true"
android:tag="creditcard"
/>
</RadioGroup>
从用户选择中我想显示或隐藏匹配的布局:
<RelativeLayout
android:id="@+id/relativeLayout_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
>
...
</RelativeLayout>
或
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cL_preapid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
>
...
</ConstraintLayout>
我用这部分代码做到了:
CompoundButton.OnCheckedChangeListener onPaymentChangedListener = (compoundButton,b) -> {
if(compoundButton.getTag().equals("prepaid")) {
relativeLayout_card.setVisibility(View.GONE);
cl_prepaid.setVisibility(View.VISIBLE);
}
if(compoundButton.getTag().equals("creditcard")) {
cl_prepaid.setVisibility(View.GONE);
relativeLayout_card.setVisibility(View.VISIBLE);
}
};
rb_creditcard.setOnCheckedChangeListener(onPaymentChangedListener);
rb_prepaid.setOnCheckedChangeListener(onPaymentChangedListener);
问题
1。单击 在我的预付费/信用卡单选按钮上,它完美地显示了匹配的视图
2。点击 在我的预付/信用卡单选按钮上它什么都不做
3。在我的 Prepaid / CreditCard RadioButton 上单击 它会反转视图:"prepaid" 显示 CreditCard 布局,"creditcard" 显示 PrepaidPay 布局
这是布局的问题(我应该实现 ViewSwwichter / ViewPager)还是我的代码有错误?
谢谢
而不是每个 RadioButton
尝试在 RadioGroup
上设置侦听器
payment_method.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId)
{
RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
if(checkedRadioButton.isChecked()) {
if (checkedId == R.id.radio_prepaid)
{
relativeLayout_card.setVisibility(View.GONE);
cl_prepaid.setVisibility(View.VISIBLE);
}
else if (checkedId == R.id.radio_creditcard)
{
cl_prepaid.setVisibility(View.GONE);
relativeLayout_card.setVisibility(View.VISIBLE);
}
}
}
});
尝试为每个按钮实现一个侦听器。它更易于阅读并减少代码。否 if 分支。
您可以在每个 setOnCheckedChangeListener((compoundButton,b) -> {}) 或更好的单选组中编写一个 lambda。
由于缺少视图层次结构,可见性问题不是很清楚。
代码
对于我的应用程序中的结帐,我让用户通过在 RadioButton 组中选择来决定他想要使用的付款方式:
<RadioGroup
android:id="@+id/payment_method"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio_prepaid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="prepaid"
android:tag="prepaid"
/>
<RadioButton
android:id="@+id/radio_creditcard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="creditcard"
android:textAllCaps="true"
android:tag="creditcard"
/>
</RadioGroup>
从用户选择中我想显示或隐藏匹配的布局:
<RelativeLayout
android:id="@+id/relativeLayout_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
>
...
</RelativeLayout>
或
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cL_preapid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
>
...
</ConstraintLayout>
我用这部分代码做到了:
CompoundButton.OnCheckedChangeListener onPaymentChangedListener = (compoundButton,b) -> {
if(compoundButton.getTag().equals("prepaid")) {
relativeLayout_card.setVisibility(View.GONE);
cl_prepaid.setVisibility(View.VISIBLE);
}
if(compoundButton.getTag().equals("creditcard")) {
cl_prepaid.setVisibility(View.GONE);
relativeLayout_card.setVisibility(View.VISIBLE);
}
};
rb_creditcard.setOnCheckedChangeListener(onPaymentChangedListener);
rb_prepaid.setOnCheckedChangeListener(onPaymentChangedListener);
问题
1。单击 在我的预付费/信用卡单选按钮上,它完美地显示了匹配的视图
2。点击 在我的预付/信用卡单选按钮上它什么都不做
3。在我的 Prepaid / CreditCard RadioButton 上单击 它会反转视图:"prepaid" 显示 CreditCard 布局,"creditcard" 显示 PrepaidPay 布局
这是布局的问题(我应该实现 ViewSwwichter / ViewPager)还是我的代码有错误?
谢谢
而不是每个 RadioButton
尝试在 RadioGroup
payment_method.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId)
{
RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
if(checkedRadioButton.isChecked()) {
if (checkedId == R.id.radio_prepaid)
{
relativeLayout_card.setVisibility(View.GONE);
cl_prepaid.setVisibility(View.VISIBLE);
}
else if (checkedId == R.id.radio_creditcard)
{
cl_prepaid.setVisibility(View.GONE);
relativeLayout_card.setVisibility(View.VISIBLE);
}
}
}
});
尝试为每个按钮实现一个侦听器。它更易于阅读并减少代码。否 if 分支。
您可以在每个 setOnCheckedChangeListener((compoundButton,b) -> {}) 或更好的单选组中编写一个 lambda。
由于缺少视图层次结构,可见性问题不是很清楚。