我是android开发的初学者。在我正在处理的应用程序中,数据正在使用默认的简单光标适配器(而不是对其进行子类化)从数据库显示到列表视图。
如果用户需要,我还想添加在网格视图中显示数据的选项。
我在网上查看了一些示例,它似乎与列表视图相同。因此,我再次使用简单的游标适配器从数据库中获取数据并将其显示在网格视图上。
起初所有项目都正确显示,直到我开始滚动它。那时一切都变得混乱了。
每个网格视图项有 2 个文本视图,第一个显示它的标题,第二个显示它的描述。因此,当滚动时,描述会混淆,项目标题的描述错误等。有时整个网格视图也会完全消失。
我的 listview 从来没有遇到过这样的问题,它总是按预期工作。
我在这里想念什么?将不胜感激您的洞察力。
更新 :
滚动时网格视图消失是由于网格视图项目的高度不均匀。
似乎我的另一个问题在于我为适配器设置的视图绑定器。如果我注释掉以下代码,我将不再在网格视图项之间出现混淆。这是视图绑定器代码:
adapter.setViewBinder(new ViewBinder() {
public boolean setViewValue(View aView, Cursor aCursor, int aColumnIndex) {
if (aColumnIndex == 3) {
String color = aCursor.getString(aColumnIndex);
aView.setBackgroundColor(Color.parseColor(color));
return true;
}
if (aColumnIndex == 4) {
if (aCursor.getString(5)!=null) {
ViewGroup parentview = (ViewGroup)aView.getParent();
parentview.removeAllViews();
TableLayout tablelayout = new TableLayout (MainActivity.this);
parentview.addView(tablelayout);
int count = Integer.parseInt(aCursor.getString(5));
String[] texts = convertStringToArray(aCursor.getString(4));
String[] cb = convertStringToArray(aCursor.getString(6));
for (int i =0;i<count;i++) {
LayoutInflater inflater = getLayoutInflater();
View checklist_row = inflater.inflate(R.layout.widget_row_layout, null);
TextView tv = (TextView)checklist_row.findViewById(R.id.textView1);
ImageView im = (ImageView)checklist_row.findViewById(R.id.imageView1);
if (cb[i].equalsIgnoreCase("true"))
im.setBackgroundResource(R.drawable.cbc);
tv.setText(texts[i]);
parentview.addView(checklist_row);
}
return true;
}
else {
TextView tv = (TextView) aView.findViewById(R.id.textView2);
tv.setText(aCursor.getString(4));
return true;
}
}
return false;
}
});
有想法该怎么解决这个吗?