1

我在onActivityResult调用相机意图后尝试更新图像视图,但似乎视图在 onActivityResult 之后被破坏并重新创建。如果我在 onCreate 上做它工作正常。我正在使用 Galaxy S3 进行测试。

奇怪的是,当我在我的桌面上构建相同的代码时,它似乎已经工作了一段时间,但不是在我的笔记本电脑上。在调试了一段时间后,桌面构建和调试器中再次出现问题,位图在 onactivityresult 中正确更新,但随后活动被破坏并立即再次创建,将视图重置为初始状态。

onCreate 被调用了 3 次,1. 屏幕首次出现时,2. 相机 Intent 完成后 onActivityResult 之前,3. on Activity Result 之后。我不确定为什么活动在#2 和#3 之前被破坏并重新创建。

我没有做任何方向改变。

** 代码 **

清单中的活动设置

   android:configChanges="orientation"
   android:screenOrientation="portrait" 

活动

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {


        if (resultCode == RESULT_OK) {
            String imageUri = "file:///storage/sdcard0/Pictures/Funhouse/IMG_20130826_163938.jpg";

            // Try by using setImageURI
            preview.setImageURI(Uri.parse(imageUri));

        }
     }

onCreate 和 Intent 请求

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        preview = (ImageView) findViewById(R.id.img_preview);

//      works fine if I set the image view here
//      String imageUri = "file:///storage/sdcard0/Pictures/Funhouse/IMG_20130826_163938.jpg";
//      preview.setImageURI(Uri.parse(imageUri));
    }



    public void takePhoto(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 0);

    }

这是布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical" >

     <Button
         android:id="@+id/btn_take_photo"
         android:layout_width="match_parent"
         android:layout_height="50dp"
         android:layout_marginBottom="67dp"
         android:onClick="takePhoto"
         android:text="Take Photo" />

    <ImageView
        android:id="@+id/img_preview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

 </LinearLayout>
4

1 回答 1

3

所以事实证明,在 OnActivityResult 中更新 ui 后,从相机活动返回调用了 on destroy,重置了原始调用活动的 UI。屏幕分辨率更改由相机活动返回触发,但仅在 onActivityResult 事件之后。

更新 android 清单以忽略该活动上的屏幕分辨率更改已修复它。

 android:configChanges="orientation|screenSize"
 android:screenOrientation="portrait" 
于 2013-08-28T17:18:37.430 回答