在 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。

由于缺少视图层次结构,可见性问题不是很清楚。