android - getView 在自定义适配器中显示错误的图像?

标签 android listview custom-adapter

我有一个包含自定义适配器和自定义行的列表。

问题是当我滚动 ListView 时,图像位于错误的位置......

这是自定义行 xml:

<LinearLayout
    android:id="@+id/imagequality_listview_row_linearlayout"
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:weightSum="1"
    android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android">


    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imagequality_listview_row_textview"
android:layout_width="0dp"
android:layout_height="40dip"
android:gravity="right"
android:paddingLeft="5dip"
android:drawableLeft="?android:attr/listChoiceIndicatorMultiple"
android:layout_weight="0.6"
/>

       <com.example.listviewtest.LoaderImageView
   android:id="@+id/imagequality_listview_row_loaderImageView"
   android:layout_width="0dp"
   android:layout_weight="0.4"
   android:layout_height="100dp"
   image="http://developer.android.com/images/dialog_buttons.png"
   />

</LinearLayout>

这是 GetView:

List<ImageQuality_Item> items;
    Context context;
    List<CheckedTextView> checkedList;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.imagequality_listview_row, null);
            holder = new ViewHolder();
            holder.layout = (LinearLayout) convertView.findViewById(R.id.imagequality_listview_row_linearlayout);

            holder.textview = (CheckedTextView) convertView.findViewById(R.id.imagequality_listview_row_textview);
            holder.image = (LoaderImageView) convertView.findViewById(R.id.imagequality_listview_row_loaderImageView);
            checkedList.add(holder.textview);
            holder.layout.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    for (int i = 0; i < checkedList.size(); i++)
                        if (checkedList.get(i).isChecked())
                            checkedList.get(i).setChecked(false);
                    ((CheckedTextView) ((LinearLayout) v).getChildAt(0)).setChecked(true);
                }
            });

            holder.textview.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    for (int i = 0; i < checkedList.size(); i++)
                        if (checkedList.get(i).isChecked())
                            checkedList.get(i).setChecked(false);
                    ((CheckedTextView) v).setChecked(true);
                }
            });
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();

        holder.textview.setText(items.get(position).getDescription());
        if (holder.image.used == false) {
            holder.image.setImageDrawable(items.get(position).getURL());
            holder.image.used = true;
        }

        return convertView;
    }

    class ViewHolder {
        LinearLayout layout;
        LoaderImageView image;
        CheckedTextView textview;
    }

我该如何解决这个问题?

最佳答案

每次调用 getView() 时,您都必须设置 Drawable,因为 android 正在重用列表元素。如果您不更新,很可能会出现较早设置的图像。

只需删除设置图像可绘制的条件,它就会起作用。

关于android - getView 在自定义适配器中显示错误的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780816/

相关文章:

android - 如何暂停和恢复 TimerTask/Timer

java - Android Gradle风格在Java中获取buildConfigField

c# - 如何以编程方式将绑定(bind)转换器添加到 WPF ListView?

android - 使用计时器刷新 ListView 而不滚动?

java - 如何处理同一 Activity 的多个 Intent ?

android - Cordova Phonegap 和 Google Maps v3 javascript api : How to add backbutton functionality when clicking either the license link or the Google maps logo

java - 使用 ArrayAdapter 将项目添加到 ListView

android - 带有简单适配器的 ListView 不显示文本

java - 自定义适配器在 ArrayList 准备好之前启动

android - 将搜索功能添加到 android 中的 gridview