91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Android fragment 如何實現狀態保存

小樊
83
2024-10-14 14:27:02
欄目: 編程語言

在Android中,Fragment的狀態保存可以通過以下幾種方法實現:

  1. onSaveInstanceState(Bundle outState)

在Fragment中重寫onSaveInstanceState()方法,將需要保存的數據存儲在Bundle對象中。當Fragment被銷毀時,這些數據會被保留。在onCreate()或onCreateView()方法中,通過傳入的Bundle對象恢復數據。

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    // 保存數據到Bundle
    outState.putString("key", "value");
}
  1. ViewModel

使用ViewModel類來存儲和管理Fragment的數據。ViewModel在Fragment之間共享數據,并且當Fragment被銷毀時,ViewModel仍然存在。這樣可以在配置更改(如屏幕旋轉)或Fragment重新創建時保留數據。

首先,創建一個ViewModel類并繼承AndroidViewModel:

public class MyViewModel extends AndroidViewModel {
    private MutableLiveData<String> data;

    public MyViewModel(@NonNull Application application) {
        super(application);
        data = new MutableLiveData<>();
    }

    public LiveData<String> getData() {
        return data;
    }

    public void setData(String value) {
        data.setValue(value);
    }
}

然后,在Fragment中使用ViewModel:

public class MyFragment extends Fragment {
    private MyViewModel viewModel;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class);
    }

    // 在活動中觀察數據變化
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        viewModel.getData().observe(getViewLifecycleOwner(), new Observer<String>() {
            @Override
            public void onChanged(String value) {
                // 更新UI
            }
        });
    }
}
  1. onPause() 和 onResume()

在Fragment的onPause()方法中保存數據,在onResume()方法中恢復數據。這種方法適用于需要在不同生命周期之間同步數據的場景。

public class MyFragment extends Fragment {
    private String data;

    @Override
    public void onPause() {
        super.onPause();
        // 保存數據
        SharedPreferences sharedPreferences = requireActivity().getSharedPreferences("myPreferences", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("data", data);
        editor.apply();
    }

    @Override
    public void onResume() {
        super.onResume();
        // 恢復數據
        SharedPreferences sharedPreferences = requireActivity().getSharedPreferences("myPreferences", Context.MODE_PRIVATE);
        data = sharedPreferences.getString("data", null);
    }
}

這些方法可以根據實際需求進行選擇,以實現Fragment的狀態保存。

0
寻乌县| 茌平县| 治县。| 连云港市| 温宿县| 鸡西市| 安福县| 云安县| 惠来县| 连云港市| 盖州市| 清原| 通江县| 周口市| 遵化市| 昔阳县| 潮安县| 凤山市| 鹤峰县| 吴堡县| 萍乡市| 弥勒县| 南通市| 封丘县| 西贡区| 嘉定区| 滨州市| 济源市| 洛川县| 刚察县| 朝阳区| 台州市| 宝清县| 军事| 深水埗区| 集安市| 正蓝旗| 鄂尔多斯市| 红安县| 长岭县| 洞口县|