我的部分应用程序使用带有三个片段的ViewPager作为创建事件的“向导”。第一个片段包含ImageView中的默认照片和启动AlertDialog的按钮,允许用户拍摄新照片或使用现有照片与事件相关联。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testing"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:text="Update Crawl Image"
android:onClick="fireImageDialog"/>
<ImageView
android:id="@+id/imageView1"
android:layout_width="278dp"
android:layout_height="284dp"
android:layout_gravity="center"
android:src="@android:drawable/alert_light_frame" />
</LinearLayout>
用户选择照片后,我希望它能够替换默认图像。 fireImageDialog
按预期从Intent.ACTION_PICK
OR MediaStore.ACTION_IMAGE_CAPTURE
接收所选图像的路径,也就是说,我已确认返回的路径是图像的有效路径。在我的onActivityResult
方法结束时,我检索包含上述代码的Fragment并调用方法来设置ImageView
的位图。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == LOAD_CRAWL_IMAGE) {
if (resultCode == RESULT_OK) {
// Some code here to handle the two potential sources of the path
// sets `selectedImagePath`
((NewCrawlBasicDetailsFragment) getSupportFragmentManager().findFragmentById(R.id.newCrawlBasicDetails)).UpdateImage(selectedImagePath);
} else if (resultCode != RESULT_CANCELED) {
Toast.makeText(this, "Failed to load image", Toast.LENGTH_LONG)
.show();
}
}
}
以及相关的UpdateImage方法:
public void UpdateImage(String path){
if (path.length() > 0) {
ImageView myPhoto = (ImageView) getView().findViewById(R.id.imageView1);
myPhoto.setImageBitmap(decodeSampledBitmapFromFile(
path, myPhoto.getWidth(),
myPhoto.getHeight()));
}
}
我的问题是,在完成所有这些之后,ImageView仍会显示原始默认图像。我试图打电话给myPhoto.invalidate()
迫使视图重新绘制,但没有任何运气。
有关可能发生的事情的任何建议吗?