开关不持久

时间:2019-01-13 08:41:57

标签: java android

我在一个片段中进行了切换,该片段在MainActivity中使用了片段布局。片段布局由(四个)片段共享。它使用方法loadFragment()在片段之间进行更改。

其中一个片段中有一个切换按钮,但是每当在片段之间切换时,切换就不会保持其状态。我如何使其持久?我已经尝试过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;
}

谢谢。

1 个答案:

答案 0 :(得分:1)

这不是问题,这是正常的行为,因为每次都重新创建该片段。但是为了保持切换按钮的状态,您需要将状态保存到一个不会更改的模型中,该模型应该在Activity内部,并将该模型传递给片段以获取的状态。该模型的开关按钮,并将其交给开关按钮。

  1. 创建一个包含持久性数据的模型。
  2. 将此模型添加到包含片段的activity中。
  3. 将此模型传递到包含开关的片段。
  4. 将开关的状态设置为模型内部的状态。
  5. 更改开关状态时,请将模型内部的值更改为新状态。