IT干货网

java之切换不持续

mate10pro 2024年05月22日 编程设计 94 0

我在 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. 更改开关状态时,将模型内的值更改为新状态。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!