Как следует из названия, как избежать потери текста TextView
после изменения ориентации?
Обратите внимание, как TextView
связан с Switch
: исходным текстом (определенным в XML)имеет значение OFF (поскольку Switch
изначально находится в выключенном состоянии), и при каждом изменении состояния Switch
текст TextView
изменяется соответствующим образом.
Ожидаемое поведение:
- Открыть приложение:
Switch
выключено, TextView
выключено ВЫКЛ - Включить
Switch
: TextView
is ON - Поверните устройство:
Switch
остается включенным и TextView
остается ON , а также
Фактическое поведение:
- Открытое приложение:
Switch
выключено, TextView
является ВЫКЛ - Включите
Switch
: TextView
is ON - Поверните устройство:
Switch
остается включенным, но TextView
is OFF
Произойдет следующеепотому что Fragment
перерисовывается и так как OnCheckedChangeListener
вызывается при каждом изменении ориентации (Мой вопрос: SwitchCompat OnCheckedChangeListener вызывается при каждом изменении ориентации фрагмента ), но обработка происходит только в том случае, если Switch
был фактически нажат (чтобы избежать проблемы в вопросе выше), TextView
рисуется с текстом по умолчанию в XML,
Поведение без isPressed ():
- Открытое приложение:
Switch
выключено, TextView
равно ВЫКЛ - Включите
Switch
: TextView
is ON - Поверните устройство:
Switch
"остается" и TextView
"остается" ON также НО OnCheckedChangeListener
вызывается снова, и я хочу избежать этого, потому что я хочу, чтобы звонок туда ТОЛЬКО , если пользователь фактически переключил Switch
MainFragment.java:
public class MainFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {
private AppCompatTextView appCompatTextView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.main_fragment, container, false);
appCompatTextView = rootView.findViewById(R.id.app_compat_textview);
final SwitchMaterial switchMaterial = rootView.findViewById(R.id.switch_material);
switchMaterial.setOnCheckedChangeListener(this);
return rootView;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.isPressed()) {
if (isChecked) {
appCompatTextView.setText("ON");
} else {
appCompatTextView.setText("OFF");
}
}
}
}