带有节头问题的ListView

时间:2010-09-06 03:21:00

标签: android listview header

您好我正在为listView添加节标题,网上的方法很少。由于我使用simpleCursorAdapter来管理我的listView,我采用了phil bogle的方法。 http://thebogles.com/blog/2010/02/section-headers-for-android-listviews/

错误发生在代码的这一部分:

    listAdapter.setViewBinder( new SimpleCursorAdapter.ViewBinder()
    {
        public boolean setViewValue(View view, Cursor cursor, int
                                   columnIndex)
        {
              if (columnIndex == nDateIndex) {
                if (isHeaderVisible(cursor)) {
                    view.setVisibility(View.VISIBLE);
                     prevDate = dateString;
                    ((TextView) view).setText(dateString);
                } else {
                    ((TextView) view).setText("");
                    view.setVisibility(View.GONE);
                }
                return true;
            }
            return false;
        }
    });

这是LogCat在我向上滚动列表时显示它们的比较:

09-06 11:06:43.460: INFO/System.out(563): Sun, 05 Sep 2010 11:41:53  (dateString)
09-06 11:06:43.460: INFO/System.out(563): Wed, 01 Sep 2010 21:58:06  (preDate)
09-06 11:06:43.460: INFO/System.out(563): 120.0                      (record)
09-06 11:06:43.820: INFO/System.out(563): Sun, 05 Sep 2010 17:47:26  (dateString)
09-06 11:06:43.820: INFO/System.out(563): Sun, 05 Sep 2010 11:41:53  (preDate)
09-06 11:06:43.820: INFO/System.out(563): 112.0                      (record)

正确的输出应该是:
      2010年9月5日,星期日
     的 112个
     120

但是当我向上滚动时,setViewValue首先调用120并与preDate(上面显示)进行比较,它变为:
     2010年9月5日,星期日     112个
    2010年9月5日,星期日中     120

那么如何在创建标题后修改节标题?为什么在滚动时调用setViewBinder?有什么建议吗?谢谢!

3 个答案:

答案 0 :(得分:3)

您还可以在这里查看非常简单的项目:http://code.google.com/p/android-section-list/。灵感来自iOS的部分列表(在iOS中开箱即用)。

答案 1 :(得分:2)

在此处查看带有部分标题小部件的ListView,这可能会对您有所帮助。它的工作方式与默认的“联系人”应用程序类似。

http://code.google.com/p/android-amazing-listview/

答案 2 :(得分:0)

  

那么如何在创建标题后修改节标题呢?

我想,isHeaderVisible()正常工作。我可以说,这就是你的问题所在。

  

为什么在滚动时调用了setViewBinder?

因为行在滚动时会被回收。