java - 切换不持续

标签 java android

我在 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 以获得该模型中开关按钮的状态并将其传递给开关按钮。

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

关于java - 切换不持续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167291/

相关文章:

java - 访问说明符涉及子类中的重写吗?

java - SonarQube 没有显示 Maven 项目的任何问题

java - 应用程序崩溃 java.lang.NumberFormatException : Invalid int:

android - Flutter 无法下载 kotlin-compiler-embeddedable-1.5.21.jar (org.jetbrains.kotlin :kotlin-compiler-embeddable-1. 5.21.jar

android - Switch - case 表达式必须是常量表达式,我不能做 if-else 语句

Android:如何在不使用android sdk工具的情况下在设备上安装apk

java - API 是否应该抛出 NullPointerExceptions

java - 从 ISO-8859-1 字符获取实际字符

java - 如何将路径变量映射到 spring-rest 中的实体

android - adb devices 命令不显示任何内容