android - 如何在不实现 Parcelable 的情况下保存自定义对象 onSaveInstanceState

标签 android bundle parcelable

我需要保存在 fragment 中使用的自定义对象,这样当屏幕旋转时(当应用程序调用 onDestroy 然后调用 onCreate 时)它就不会丢失

现在通常的方法是实现 Parcelable 接口(interface)并将其作为 Parcelable 对象保存到包中。

这是一种非常乏味的做事方式。

有没有办法将对象作为“putObject”方法传递?

最佳答案

您可以将数据保存在 fragment 中,并在配置更改期间保留,如example .

Extend the Fragment class and declare references to your stateful objects.

public class RetainedFragment extends Fragment {
    // data object we want to retain
    private MyDataObject data;
    // this method is only called once for this fragment
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // retain this fragment
        setRetainInstance(true);
    }
    .. getter and setter
}

Then use FragmentManager to add the fragment to the activity.

public class MyActivity extends Activity {

    private RetainedFragment dataFragment;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ..    
        // find the retained fragment on activity restarts
        FragmentManager fm = getFragmentManager();
        dataFragment = (RetainedFragment) fm.findFragmentByTag(“data”);

        // create the fragment and data the first time
        if (dataFragment == null) {
            // add the fragment
            dataFragment = new DataFragment();
            fm.beginTransaction().add(dataFragment, “data”).commit();
        } else { 
            // available dataFragment.getData()
            .. 
           // save data in onDestroy dataFragment.setData(yourData);

关于android - 如何在不实现 Parcelable 的情况下保存自定义对象 onSaveInstanceState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26582640/

相关文章:

android - 支持多屏幕的最佳方式? - 安卓

android - 如何在android中制作多行edittext

android - 为什么实现Google Analytics时没有创建R.xml文件资源?

android - 如何在 Parcelable 类中写入和读取 org.joda.time.Date

java - 预验证类中的 Android 错误类引用解析为意外实现

java - Launch4j:This application requires a Java Runtime Environment 1.8.0_161 using maven?

javascript - Bundle.js 不接受任何更改

ios - ios降低应用程序加载时间

android - 如何将 Parcelable 对象从子 Activity 传递到父 Activity ?

android - 继承人类的 getCreator 的 Parcelable 继承问题