![](/img/trans.png)
[英]Android - SwitchCompat OnCheckedChangeListener action is running every time the activity is started
[英]SwitchCompat OnCheckedChangeListener called on every orientation change of Fragment
我有一個托管片段的活動,問題是,在每次方向更改時,僅當開關處於檢查狀態時, OnCheckedChangeListener
調用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();
}
}
});
}
}
我發現的一個解決方案是,在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
}
}
}
如果還有更優雅的答案,我將完全等待他們!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.