【问题标题】:What method(s) are needed from an imageview to save its current instancestate?图像视图需要哪些方法来保存其当前实例状态?
【发布时间】:2013-05-11 14:48:29
【问题描述】:

我有一个图像视图,其图像由用户选择和更改,我需要保存它的实例状态,以便在屏幕方向更改或切换到不同的活动等时显示当前图像。我一直在寻找虽然但无法弄清楚我需要使用哪些方法从我需要传递到 onSaveInstanceState 包的图像视图中提取信息。有人可以指出我正确的方向吗?

【问题讨论】:

    标签: android imageview instance


    【解决方案1】:

    没有什么可以“用来从图像视图中提取信息”。您需要通过其他方式知道ImageView 中图像的来源,并选择将其保存在您的实例状态中。

    例如,更新ImageView 的代码可以将图像源数据存储在托管ImageView 的片段或活动的数据成员中。

    【讨论】:

    • 我有图片的资源 ID,我应该使用 getResourceId 并将其保存到包中吗?
    • @user1409172:我不知道您指的是什么“getResourceId”。话虽如此,将资源 ID 存储在 Bundle 中应该可以正常工作。
    • 似乎“getResourcesId”是有人为他们的目的而制作的东西,我偶然发现了,但你和它为我指明了正确的方向,我发现了我花了一大早寻找的东西。感谢您帮助自学成才的菜鸟学习并获得工作成果:)
    【解决方案2】:

    这对我有用:

    我首先将位图的状态存储在 onSavedInstanceState 中:

    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putParcelable(BITMAP, bitmap);
    }
    

    然后,我在 onRestoreInstanceState 中检索并加载它:

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
            if(savedInstanceState != null)
            {
                bitmap = (Bitmap) savedInstanceState.getParcelable(BITMAP);
                loadImg.setImageBitmap(bitmap);
            }
    }
    

    【讨论】:

    • onSaveInstanceState() 回调不是为承载大对象(如位图)而设计的,并且其中的数据必须先序列化然后反序列化,这会消耗大量内存并导致配置更改缓慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2016-02-15
    相关资源
    最近更新 更多