我在调用相机意图后尝试更新onActivityResult
上的图像视图,但看起来视图在onActivityResult之后被破坏并重新创建。如果我在onCreate上执行它,它工作正常。我正在使用Galaxy S3进行测试。
奇怪的是,当我在桌面上构建相同的代码时,它似乎已经工作了一段时间,但不是在我的笔记本电脑上。在调试它一段时间后,问题再次出现在桌面构建中,并且在调试器中,位图在onactivityresult中正确更新,但随后活动被破坏并立即创建,将视图重置为初始状态。
onCreate被调用三次,1。当屏幕首次显示时,2。相机意图完成后和onActivityResult之前,以及3. on 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>
答案 0 :(得分:3)
因此事实证明,在OnActivityResult中更新ui之后,从相机活动返回调用on destroy,重置原始调用活动的UI。屏幕分辨率更改由Camera Activity返回触发,但仅在onActivityResult事件之后触发。
更新Android清单以忽略该活动上的屏幕分辨率更改修复它。
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"