GridView Elements改变了它们的位置(Android)

时间:2015-07-16 04:12:00

标签: android android-gridview

我有问题。当我滚动 gridView 图像更改其位置时。 GetView 代码。 THX

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
        holder = new ViewHolder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    ListItem newsItem = listData.get(position);

    if (holder.imageView != null) {
        new ImageDownloaderTask(holder.imageView).execute(newsItem.getUrl());
    }

    return convertView;
}

元素布局。这是第一个listView。我正在使用listView的列表适配器。 的 list_row_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff34495e"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="-24dp"
android:paddingBottom="-24dp">

<ImageView
    android:id="@+id/thumbImage"
    android:layout_width="360dp"
    android:layout_height="360dp"
    android:adjustViewBounds="false"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="false"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="false"
    android:src="@drawable/placeholder" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

ListView和GridView在项目不再可见时回收项目,因此如果您的ImageView未正确设置图像,则会出现问题。

您在&#34; holder.imageView&#34;中设置图像的唯一位置显然在ImageDownloaderTask中,所以你必须在该类中有问题。 或者它没有正确设置holder.imageView,或者下载图像并替换旧图像需要很长时间。

试试这个:

if (holder.imageView != null) {
  holder.imageView.setImageDrawable(null);
  new ImageDownloaderTask(holder.imageView).execute(newsItem.getUrl());
}

这不会让事情变得正确,但是当ImageDownloaderTask类工作时以及不工作时,你会看得更清楚。

答案 1 :(得分:0)

   public View getView(int position, View convertView, ViewGroup parent){
    // TODO Auto-generated method stub
    View v;
    if(convertView==null)
    {
        LayoutInflater li = getLayoutInflater();
        v = li.inflate(R.layout.icontext, null);
    }else{
        v = convertView;
    }
    TextView tv = (TextView)v.findViewById(R.id.icon_text);
    tv.setText(providers[position]);
    ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
    iv.setImageResource(R.drawable.icon);

    return v;
}