0

我是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;

 }
});

有想法该怎么解决这个吗?

4

1 回答 1

0

我建议您的getView()方法存在问题。在Listview 和 gridview 中使用适配器类来显示数据。在 android 许多适配器中。所以我建议首先阅读有关如何使用适配器的信息? 在这里,我提供一个有助于了解适配器使用的链接。BaseAdapter并使用他的链接,我在其中显示了如何使用getView()方法的整个代码。使用 getView 方法。我希望你能解决你的问题。

编辑:

我建议在此处使用此链接使用光标适配器的简单示例。光标适配器的简单示例以及与您的问题类似的此链接。带有 Gridview 的光标适配器

我希望你能得到你的答案。谢谢。

于 2013-06-08T04:22:37.167 回答