我正在尝试使用图像视图和文本视图从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。我只需要清除我正在使用的数组列表。谢谢你试图帮助我们。