我在 fragment 中做了一个切换,它在 MainActivity 中使用 fragment 布局。 fragment 布局由四个 fragment 共享(或者)。它使用一个方法 loadFragment()
在 fragment 之间进行更改。
在其中一个 fragment 中,有一个切换按钮,但是每当我在 fragment 之间进行更改时,开关就不会保留其状态。我怎样才能让它坚持下去?我尝试过 SharedPreferences。
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_mufradat_harian, container, false);
mufradatSwitch = v.findViewById(R.id.switchMufradat);
mufradatSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(mufradatSwitch.isChecked()){
SharedPreferences pres = PreferenceManager.getDefaultSharedPreferences(getContext());
Boolean checked = pres.edit().putBoolean("checked", true).commit();
}else{
SharedPreferences pres = PreferenceManager.getDefaultSharedPreferences(getContext());
Boolean checked = pres.edit().putBoolean("checked", false).commit();
}
}
});
return v;
}
谢谢。
请您参考如下方法:
这不是问题,这是正常行为,因为您每次都重新创建 fragment 。但是为了保持开关按钮的状态,您需要将状态保存到一个不会更改的模型中,该模型应该位于您的 Activity
内,并将该模型传递给 fragment 以获得该模型中开关按钮的状态并将其传递给开关按钮。
- 创建一个包含持久数据的模型。
- 将此模型添加到包含 fragment 的
activity
中。 - 将此模型传递给包含开关的 fragment 。
- 将开关的状态设置为模型内部的状态。
- 更改开关状态时,将模型内的值更改为新状态。