我有一个 GridView,我应该填充两个不同的项目,例如 left_item 和 right_item。无论如何,我写了一个从 BaseAdapter 扩展的自定义适配器。
而且我看到转换后的视图并没有按照我的想法排列。所以我看到我的 GridView 是这样的:
Left Right
Right Left
Left Right
Left Right
Right Left
… …
等等。我也找到了一个可以订购的解决方案。但我的问题是我的解决方案是否是解决这个问题的正确方法?这是我的自定义适配器和我的解决方案:
class MyGridAdapter extends BaseAdapter {
// return even count in any case
public int getCount() {
if (items.size() % 2 == 0)
return items.size();
else
return (items.size() + 1);
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
// Here, i thought that i was gonna have
// converted views one left one right, but i didn't!
if (v == null) {
if (position % 2 == 0) {
// inflate left side
v = inflater.inflate(R.layout.left_shelf_item, null);
} else {
// inflate right side
v = inflater.inflate(R.layout.right_shelf_item, null);
}
}
if (position % 2 == 0) {
// So i had to inflate left view, if i'm not getting that
if(v.getId() != R.layout.left_shelf_item)
v = inflater.inflate(R.layout.left_shelf_item, null);
if (position != items.size()) {
ImageView img = (ImageView) v
.findViewById(R.id.leftShelfItemBook);
if (img != null) {
int bookId = Integer.parseInt(items.get(position)
.getBookId());
if (images.get(bookId) != null) {
img.setImageDrawable(Drawable.createFromPath(images
.get(bookId)));
} else {
img.setImageDrawable(null);
}
}
}
} else {
// And here, i do the same for right
if(v.getId() != R.layout.right_shelf_item)
v = inflater.inflate(R.layout.right_shelf_item, null);
if (position != items.size()) {
ImageView img = (ImageView) v
.findViewById(R.id.rightShelfItemBook);
if (img != null) {
int bookId = Integer.parseInt(items.get(position)
.getBookId());
if (images.get(bookId) != null) {
img.setImageDrawable(Drawable.createFromPath(images
.get(bookId)));
} else {
img.setImageDrawable(null);
}
}
} else if (position == items.size()) {
((View) v.findViewById(R.id.rightShelfItemHolder))
.setVisibility(View.GONE);
}
}
return v;
}
}
如您所见,如果它们不是应有的视图,我会通过再次膨胀视图来强制适配器使用正确的视图。
正因为如此,我非常担心内存泄漏和 OutOfMemoryError,或者由于膨胀太多而导致的其他一些错误。
有没有其他方法可以实现这一目标?我需要一个更好的解决方案,拜托。任何帮助或信息将不胜感激。