Проверенное состояние не отображается после возобновления фрагмента
Я создаю радиокнопки в радиогруппе динамически. При использовании сохраненного состояния экземпляра для установки того, какая радиокнопка была выбрана до закрытия приложения, проверяется правильная радиокнопка, но она не отображает проверенное состояние. Регистрируя данные, я знаю, что они проверены. Это также очевидно, поскольку не обновляется при нажатии.
Когда я устанавливаю переключатель, который проверяется при создании, когда не воссоздает состояние экземпляра, проблем не возникает.
public class PaymentMethodsAdapter {
private static final String TAG = PaymentMethodsAdapter.class.getCanonicalName();
private LayoutInflater layoutInflater;
private RadioGroupPlus radioGroup;
private List<PaymentMethod> paymentMethods;
private int selectedPaymentMethod = -1;
public PaymentMethodsAdapter(RadioGroupPlus radioGroup, Context context) {
layoutInflater = LayoutInflater.from(context);
this.radioGroup = radioGroup;
radioGroup.setOnCheckedChangeListener(new RadioGroupPlus.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroupPlus radioGroupPlus, int i) {
selectedPaymentMethod = i;
}
});
}
public void setPaymentMethods(List<PaymentMethod> paymentMethods, int selectedPaymentMethod) {
this.selectedPaymentMethod = selectedPaymentMethod;
this.paymentMethods = paymentMethods;
radioGroup.removeAllViews();
for(int i = 0; i < paymentMethods.size(); i++) {
PaymentMethod paymentMethod = paymentMethods.get(i);
View v = layoutInflater.inflate(R.layout.view_payment_method, radioGroup, false);
RadioButton radioButton = v.findViewById(R.id.paymentMethodTitle);
radioButton.setId(i);
radioButton.setText(paymentMethod.getName());
TextView description = v.findViewById(R.id.paymentMethodDescription);
description.setText(paymentMethod.getDescription());
radioGroup.addView(v);
}
if(selectedPaymentMethod >= 0) {
radioGroup.check(selectedPaymentMethod);
}
}
public int getSelectedPaymentMethodPosition() {
return selectedPaymentMethod;
}
public PaymentMethod getSelectedPaymentMethod() {
if(selectedPaymentMethod >= 0) {
return paymentMethods.get(selectedPaymentMethod);
} else {
return null;
}
}
}
во фрагменте:
private void updatePaymentMethods() {
if(viewInflated && checkoutInfo != null) {
paymentMethodsAdapter.setPaymentMethods(checkoutInfo.getPaymentMethods(), selectedPaymentMethod);
paymentMethodsGroup.invalidate();
Log.i(TAG, "updating payment methods. selected: "+ selectedPaymentMethod);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if(savedInstanceState != null) {
selectedPaymentMethod = savedInstanceState.getInt(SELECTED_PAYMENT_METHOD_KEY, -1);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_checkout, container, false);
...
viewInflated = true;
updatePaymentMethods();
return v;
}