我有一个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,或者由于膨胀过多导致的其他一些错误。
还有其他方法可以达到这个目的吗?我需要一个更好的解决方案。 任何帮助或信息将不胜感激。