【问题标题】:Handling screen orientation changes处理屏幕方向更改
【发布时间】:2014-01-05 23:05:43
【问题描述】:

我的应用程序功能是这样的:一个可以纵向或横向可见的 imageView,用户可以在图像之间滑动以更改 imageView 中的图像。问题是,如果您滑动以选择不同的图像,然后将设备旋转为横向,它会显示用户选择的原始图像,而不是 imageView 中显示的当前图像。我想知道如何在旋转之前获取当前图像的 id,然后将其设置为横向。是在 onPause 方法中,还是我可以使用 onConfigurationChanged 方法?

【问题讨论】:

    标签: java android orientation landscape


    【解决方案1】:

    请看这里:http://developer.android.com/training/basics/activity-lifecycle/recreating.html

    根据文档,当方向改变时,活动会被销毁。为了在此类事件中保存额外的状态信息,您可以重写 onSaveInstanceState() 方法并将键值对添加到 bundle 对象,如下所示:

    public void onSaveInstanceState(Bundle savedInstanceState){
        savedInstanceState.putInt("CurrentImageId", [current image id here]);
        super.onSaveInstanceState(Bundle savedInstanceState);
    }
    

    然后,当应用程序在方向更改后恢复时,您可以通过覆盖 onCreate(Bundle savedInstanceState) 方法或 onRestoreInstanceState(Bundle savedInstanceState) 方法来检索当前图像的 id:

    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    
        int currentImageId = savedInstanceState.getInt("CurrentImageId");
        //Set the current image here, after retrieving the id
    }
    

    当然,我不知道你是如何识别你的图像的,所以我不能告诉你如何设置/检索当前图像的 id。

    【讨论】:

    • 我理解逻辑,现在我很难从 imageView 获取可绘制引用。我尝试使用 imageView.getId() 但返回 0。是否有从 imageView 获取可绘制 id 的函数?我希望得到类似 R.drawable.imageX
    • 使用getDrawable会导致:Bundle中的putInt(String,int)不能应用于(String, android.graphics.drawable.Drawable)
    • 是的,事后您不能轻易获得可绘制对象的 id。相反,尝试通过在设置可绘制对象时存储对它的引用来跟踪当前显示的可绘制对象。编辑:您在可绘制资源文件夹中显示的图像,还是文件?如果它们不在可绘制资源文件夹中,则它们不会具有您正在寻找的那种 id。例如,如果它们是文件,请尝试存储路径名。
    • 图像在可绘制资源文件夹中。我想我已经弄清楚了,但是我还有 1 个更令人困惑的部分,在旋转到横向然后回到纵向之后,那会是什么方法?尽管在第一次方向改变后它在正确的图像上,但似乎旋转到横向然后回到纵向仍然会恢复到原始图像
    • 嗯,您的意思是它现在适用于第一次方向更改,但不适用于下一次?这很奇怪。我不知道为什么会这样......
    【解决方案2】:

    尝试在您的 AndroidManifest.xml 中的 <activity> 下方添加 android:configChanges="orientation"

    【讨论】:

    • 试过了还是不行,还是恢复到原来选择的图片
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2011-06-13
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多