Android GridView,重复项目

时间:2013-08-12 08:19:24

标签: java android gridview

我正在尝试使用图像视图和文本视图从View Pager填充网格视图。我已完成那部分,但我发现了一个错误。问题是每当我从当前页面切换到第二页时,网格视图中的项目都会重复。

例如,我的View Pager中有三个页面 网页A 网页B PageC

所有页面都有一个带有图像和文本的网格视图。 默认页面是PageA,当我切换到PageC时,PageA网格视图中的所有项目都是重复的。

以下是我的网格视图适配器中的getView()代码,它扩展了BaseAdapter类。

    @Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder view;
    LayoutInflater inflater = activity.getLayoutInflater();
    Map<String, String> tempMap = (Map<String, String>) arrList.get(position);
    Log.d("getView()", "convertView = " + convertView);
    Log.d("getView()", "position = " + position);

    imageLoader.clearMemoryCache();

    if(convertView==null)
    {
        view = new ViewHolder();
        convertView = inflater.inflate(R.layout.grid_row, parent, false);
        convertView.setTag(view);
        Log.d("[convertView == null] - " + tempMap.get("KEY_NAME"), view + "");
    }
    else
    {
        view = (ViewHolder) convertView.getTag();
        Log.d("[convertView != null] - " + tempMap.get("KEY_NAME"), view + "");
    }

    Resources r = Resources.getSystem();
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 250, r.getDisplayMetrics());

    view.textView = (TextView) convertView.findViewById(R.id.textView);
    view.imageView = (ImageView) convertView.findViewById(R.id.imageView);

    view.textView.setText(tempMap.get("KEY_NAME") + " - P" + tempMap.get("KEY_COST"));

    view.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    view.imageView.setLayoutParams(new RelativeLayout.LayoutParams((int)px, (int)px));
    imageLoader.displayImage(tempMap.get("KEY_THUMBURL"), view.imageView, options);

    return convertView;
}

编辑:

您能否进一步解释ViewHolder部分?

以下是您要问的代码。

    public GridViewAdapter(Activity activity, ArrayList<HashMap<String, String>> argArrList) {
    super();
    this.activity = activity;
    Log.d("GridViewAdapter", "Called constructor");

    options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.ic_stub)
    .showImageForEmptyUri(R.drawable.ic_empty)
    .showImageOnFail(R.drawable.ic_error)
    .cacheInMemory(true)
    .bitmapConfig(Bitmap.Config.RGB_565)
    .build();

    arrList = argArrList;
}

@Override
public int getCount() {
    return arrList.size();
}

@Override
public String getItem(int position) {
    Map<String, String> tempMap = (Map<String, String>) arrList.get(position);
    return tempMap.get("KEY_NAME");
}

@Override
public long getItemId(int position) {
    return 0;
}

public static class ViewHolder
{
    public ImageView imageView;
    public TextView textView;
    public GridView gridView;
}

更新

我现在已经解决了这个问题,它不是来自网格视图适配器。它来自使用适配器的Fragment。我只需要清除我正在使用的数组列表。谢谢你试图帮助我们。

0 个答案:

没有答案