SwitchCompat OnCheckedChangeListener вызывается при каждом изменении ориентации фрагмента - PullRequest
0 голосов
/ 21 января 2019

У меня есть действие, в котором размещается фрагмент, и проблема в том, что при каждом изменении ориентации и только если переключатель находился в проверенном состоянии, вызывается OnCheckedChangeListener. Как мне решить эту проблему? Спасибо!

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        if (savedInstanceState == null) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.container, new MainFragment())
                    .commit();
        }
    }
}

MainFragment.java

public class MainFragment extends Fragment {

    private SwitchMaterial switchMaterial;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.main_fragment, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        switchMaterial = view.findViewById(R.id.switch_material);
        switchMaterial.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(getContext(), "Switch is checked.", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getContext(), "Switch is NOT checked.", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

1 Ответ

0 голосов
/ 22 января 2019

Одно решение, которое я нашел, состоит в том, чтобы проверить в методе onCheckedChanged, действительно ли пользователь переключил buttonView (коммутатор), а не после восстановления savedInstanceState после изменения ориентации, например:

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (buttonView.isPressed()) {
        if (isChecked) {
            // Handle the checked state
        } else {
            // Handle the NOT checked state
        }
    }
}

Если есть более элегантные ответы, я их полностью жду!

...