更新片段内的ImageView位图

时间:2014-03-26 20:01:21

标签: android android-fragments

我的部分应用程序使用带有三个片段的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()迫使视图重新绘制,但没有任何运气。

有关可能发生的事情的任何建议吗?

0 个答案:

没有答案