ImageView 不显示图像,但获取图像的相同方法适用于应用程序的其他部分

ImageView not displaying the image, but same method to fetch image works in other parts of app

我在 ListView row 中有 3 个 ImageViews,但由于某种原因它们没有出现。

我正在使用相同的功能在应用程序的另一部分检索图像,它可以毫无问题地获取图像。所以检索图像位图的方法不是问题。

还有什么可能导致图像不显示在 ImageView 中?我调试了 File 不为空。

请帮忙!

在getView方法中显示图片的BaseAdapter

                try {
                    if (user.getGameOwned().size() > 0) {
                        String coverPhotoName = user.getGameOwned().get(0).getCoverPhoto();
                        if (coverPhotoName != null) {
                            ImageHelper.loadOrDownloadGameCover(mContext, coverPhotoName,
                                    holder.iv2, holder.gameCoverSpinner1);
                        }
                    }
                }
                catch (Exception e) { e.printStackTrace(); }

                try {
                    if (user.getGameOwned().size() > 1) {
                        String coverPhotoName = user.getGameOwned().get(1).getCoverPhoto();
                        if (coverPhotoName != null) {
                            ImageHelper.loadOrDownloadGameCover(mContext, coverPhotoName,
                                    holder.iv3, holder.gameCoverSpinner2);
                        }
                    }
                }
                catch (Exception e) { e.printStackTrace(); }

                try {
                    if (user.getGameOwned().size() > 2) {
                        String coverPhotoName = user.getGameOwned().get(2).getCoverPhoto();
                        if (coverPhotoName != null) {
                            ImageHelper.loadOrDownloadGameCover(mContext, coverPhotoName,
                                    holder.iv4, holder.gameCoverSpinner3);
                        }
                    }
                }
                catch (Exception e) { e.printStackTrace(); }

获取图像作为位图的方法

public static void loadOrDownloadGameCover(final Context context, final String coverPhotoName,
                                           ImageView gameCover, final ProgressBar loadingSpinner) {

    if (isGameCoverDownloaded(context, coverPhotoName)) {
        loadingSpinner.setVisibility(View.GONE);

        try {
            File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),
                    coverPhotoName);
            gameCover.setImageBitmap(BitmapFactory.decodeFile(file.toString()));
        }
        catch (Exception e) { e.printStackTrace(); }
    }
    else {
        String uri = GlobalVars.URL_GAME_COVER_DOWNLOAD + coverPhotoName;
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.placeholder)
                .showImageForEmptyUri(R.drawable.placeholder)
                .showImageOnFail(R.drawable.placeholder)
                .build();

        ImageLoader.getInstance().displayImage(uri, gameCover, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                loadingSpinner.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                loadingSpinner.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                loadingSpinner.setVisibility(View.GONE);
                saveGameCover(context, coverPhotoName, loadedImage);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                loadingSpinner.setVisibility(View.GONE);
            }
        });
    }
}

XML 的 ListView 行

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" >

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:background="@drawable/card_white_selector"
        android:padding="20dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="30dp" >

            <ImageView
                android:id="@+id/avatar"
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:layout_marginRight="14dp"
                android:adjustViewBounds="true"
                android:background="@drawable/avatar_bg" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:orientation="vertical" >

                <com.walintukai.lovelup.widgets.CustomTextView
                    android:id="@+id/username"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/CardUsernameTextView" />

                <com.walintukai.lovelup.widgets.CustomTextView
                    android:id="@+id/details"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/CardUserDetailsTextView" />

                <com.walintukai.lovelup.widgets.CustomTextView
                    android:id="@+id/location"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/CardUserDetailsTextView" />

            </LinearLayout>

        </LinearLayout>

        <com.walintukai.lovelup.widgets.CustomTextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#666"
            android:textSize="16sp" />

        <LinearLayout
            android:id="@+id/games_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center_horizontal">

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/cover_one"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center_vertical"/>

                <ProgressBar
                    android:id="@+id/cover_one_spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    style="@android:style/Widget.ProgressBar.Small"
                    android:visibility="gone" />

            </FrameLayout>

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/cover_two"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"/>

                <ProgressBar
                    android:id="@+id/cover_two_spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    style="@android:style/Widget.ProgressBar.Small"
                    android:visibility="gone" />

            </FrameLayout>

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/cover_three"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center_vertical"/>

                <ProgressBar
                    android:id="@+id/cover_three_spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    style="@android:style/Widget.ProgressBar.Small"
                    android:visibility="gone" />

            </FrameLayout>

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

问题在于您的布局 XML。 layout_weight 参数只能在 immediate parent 是 LinearLayout 时使用,但是 ImageView 的 immediate parent 是 FrameLayout.尝试将 layout_weight 值移动到 FrameLayout 中,如下所示:

    <LinearLayout
        android:id="@+id/games_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal">

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/cover_one"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center_vertical"/>

            <ProgressBar
                android:id="@+id/cover_one_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                style="@android:style/Widget.ProgressBar.Small"
                android:visibility="gone" />

        </FrameLayout>

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/cover_two"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"/>

            <ProgressBar
                android:id="@+id/cover_two_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                style="@android:style/Widget.ProgressBar.Small"
                android:visibility="gone" />

        </FrameLayout>

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/cover_three"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center_vertical"/>

            <ProgressBar
                android:id="@+id/cover_three_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                style="@android:style/Widget.ProgressBar.Small"
                android:visibility="gone" />

        </FrameLayout>

    </LinearLayout>

您可能需要更多地使用 ImageView 参数来使它们看起来正确,但希望它们至少现在会出现。