当前位置: 首页 > 知识库问答 >
问题:

在最小化时保存和恢复自定义数组

拓拔稳
2023-03-14

我制作了一个可以绘制的自定义视图,该视图保存到arraylist中。我想在onSaveInstanceState中保存这些ArrayList,并在onRestoreInstanceState中检索它们。我曾尝试将SharedReferences与Json一起使用,但它不起作用,甚至无法打包。我想保存路径和油漆。

钢笔类:

 private static class Pen implements Parcelable {
    Path path;
    Paint paint;
    int color;
    float width;
    Pen(int colort, float widtht ) {
        color = colort;
        width = widtht;
        path = new Path();
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStrokeWidth(width);
        paint.setColor(color);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setStrokeCap(Paint.Cap.ROUND);
    }
    // De-parcel Pen object
    public Pen(Parcel in) {
        color = in.readInt();
        width = in.readFloat();
        path = new Path();
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStrokeWidth(width);
        paint.setColor(color);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setStrokeCap(Paint.Cap.ROUND);
    }


    // Function that writes Dice values to parcel
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(color);
        dest.writeFloat(width);
    }


    // Creator of Parcelable
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator()  {

        public Pen createFromParcel(Parcel in) {
            return new Pen(in);
        }

        public Pen[] newArray(int size) {
            return new Pen[size];
        }
    };


    // Function to implement Parcelable interface
    @Override
    public int describeContents() {
        return 0;
    }

}

OnsaveInstanceState:

@Override
public Parcelable onSaveInstanceState()
 {
     Bundle bundle = new Bundle();
     bundle.putParcelable("superState", super.onSaveInstanceState());
     bundle.putParcelableArrayList("pen", mPenList);
     return bundle;
}

onRestoreInstanceState:

@Override
    public void onRestoreInstanceState(Parcelable state)
    {

        if (state instanceof Bundle) // implicit null check
        {
            Bundle bundle = (Bundle) state;
            this.mPenList = bundle.getParcelableArrayList("pen");
            state = bundle.getParcelable("superState");

        }
        super.onRestoreInstanceState(state);

    }

共有1个答案

东方弘壮
2023-03-14
 @Override
protected void onSaveInstanceState(Bundle outState) {
    // Save the state so that next time we know if we need to refresh data.
    outState.putParcelableArrayList("yourkey",yourlist);
  );
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
   list= savedInstanceState.getParcelableArrayList("yourkey");
}

也许这可以帮助你:)

 类似资料:
  • 我正在创建一个JavaFX2.2程序,需要创建自定义UI控件(仅限于顶部的最小化最大化/恢复关闭按钮)。我需要为这个目的创建自定义按钮,简单到刚刚创建。 我只需要最小化和最大化/恢复按钮的真正代码(关闭按钮相当于儿戏)。最小化按钮将应用程序恢复到任务栏。最大化按钮将其最大化以适应用户的屏幕,并在最大化时切换到还原按钮。当单击恢复按钮时,窗口将恢复到其初始大小(1200x600)。 我尝试了在我的f

  • 我刚刚读了Hystrix指南,正试图把我的头缠绕在默认断路器和恢复周期是如何操作的,然后是如何定制它们的行为。 显然,如果电路跳闸,Hystrix会自动调用该命令的方法;这一点我很理解。但是,首先要根据什么标准来使电路跳闸呢?理想情况下,我想尝试多次击打支持服务(例如,最多3次),然后我们才会认为该服务是脱机/不健康的,并跳闸断路器。我该如何实现?在哪里实现? null 所以我猜我的下一个问题部分

  • 在绘画的时候,经常会有这种情况,本来正在用绿色笔画,突然需要用红色笔画几笔,但画完了之后又要换成绿色笔。如果是在现实中作画,可以把笔蘸上不同的墨水,画了之后又蘸上之前的墨水,或者准备几只笔,要用哪只就选哪只。 在Canvas中也可以这样,不过Canvas中的画笔永远只有一只。所以,如果要更换画笔的颜色,就需要保存和恢复状态。状态其实就是画布当前属性的一个快照,包括: 图形的属性值,如strokeS

  • 问题内容: 在尝试编写自己的Python PyQt4模块函数之前,我想问一下是否有人可以共享这样的函数。 在我有许多使用PyQt4和qtDesigner构建的GUI的python程序中,我使用QSettings方法在关闭和启动期间保存和恢复UI状态以及所有小部件的值。 本示例说明了如何保存和还原一些lineEdit,checkBox和radioButton字段。 是否有人拥有可以遍历UI并找到所有

  • 我有一个ViewPager有3个碎片绑定在FragmentPagerAdapter在一个FragmentActivity中,当我切换到不同的应用程序,回到我的应用程序后,或者在一个输入调用后,碎片没有恢复到以前的状态,一个碎片完全消失了,一些碎片按钮点击不工作..但在模拟器中它的工作很好 帮帮我吧...

  • 我正在使用node.sdk、stormpath、express.js和passport.js为我的新网站制作一个用户帐户系统。所以我设置了一个自定义数据槽的帐户。我想知道,当他们注销时,我如何将新数据发布到这个自定义数据槽中,并在他们登录时检索它。我对使用node是新手,我不知道在他们登录时,我的代码应该放在哪里,也不知道如何访问“用户”帐户信息。据我所知,Passport.js正在处理身份验证,