【问题标题】:Listview scrolled back shows wrong imageview向后滚动的 Listview 显示错误的 imageview
【发布时间】:2012-09-30 11:40:03
【问题描述】:

我想创建一个列表视图,其中每个元素都有多个图像视图,但它们永远不会一起显示;他们将根据他们想要描述的数据显示。 这是元素布局的一部分

<ImageView
    style="@style/release_item_resolution_pic"
    android:id="@+id/release_res_standard"
    android:layout_alignLeft="@+id/release_label_title"
    android:src="@drawable/format_standard" />

<ImageView
    style="@style/release_item_resolution_pic"
    android:id="@+id/release_res_720p"
    android:layout_toRightOf="@+id/release_res_standard"
    android:src="@drawable/format_720p" />

<ImageView
    style="@style/release_item_resolution_pic"
    android:id="@+id/release_res_webdl"
    android:layout_toRightOf="@+id/release_res_720p"
    android:src="@drawable/format_webdl" />

<ImageView
    style="@style/release_item_resolution_pic"
    android:id="@+id/release_res_dvdrip"
    android:layout_toRightOf="@+id/release_res_webdl"
    android:src="@drawable/format_dvdrip" />

请记住,每个元素的可见性都设置为“消失”。 要设置我使用这个循环的图片显示,进入 getView() 方法:

            for(VideoFormat format:selectedRel.getResolutions()){
            ImageView resolutionPic=getResolutionImageView(format, contentView);
            resolutionPic.setVisibility(View.VISIBLE);
        }

它工作正常,除非我滚动列表然后返回第一个元素。看起来列表加载了其他图片,即使它不应该这样做;一段时间后,不必要的图片消失了,但这需要太多时间。我可以做些什么来避免这一切,并始终让正确的图片可见?
编辑: 这是 getResolutionImageView 方法:

private ImageView getResolutionImageView(VideoFormat format, View contentView){
        switch(format){
        case BDRIP:
            return (ImageView)contentView.findViewById(R.id.release_res_bdrip);

        case BLURAY:
            return (ImageView)contentView.findViewById(R.id.release_res_bd);

        case DVDRIP:
            return (ImageView)contentView.findViewById(R.id.release_res_dvdrip);

        case HD_1080i:
            return (ImageView)contentView.findViewById(R.id.release_res_1080i);

        case HD_1080p:
            return (ImageView)contentView.findViewById(R.id.release_res_1080p);

        case HD_720p:
            return (ImageView)contentView.findViewById(R.id.release_res_720p);

        default:
            return (ImageView)contentView.findViewById(R.id.release_res_standard);

        case WEB_DL:
            return (ImageView)contentView.findViewById(R.id.release_res_webdl);

        }
    }

【问题讨论】:

  • 发布getResolutionImageView方法..

标签: android android-listview android-imageview android-view


【解决方案1】:

当列表视图滚动时,它会调用getView 方法。但是它得到的convertView 可能包含旧数据。 (其他列表行的数据)。

所以这里是解决方案

getView方法中,当你设置一个图像的Visibility时,设置所有其他ImageView的Invisible

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多