0

我实际上是通过填充数据库中的项目来创建 ListView。
当到达列表视图的末尾时,我会填充更多项目。现在,我想要基于从数据库返回的值的 ListView 的分隔符。如果数据库的两个连续值相同,我希望它们用细线分隔,如果不是粗线。

我尝试像这样通过适配器设置它们

if (convertView == null) {

            holder = new ViewHolder();

            if (eventSource.get(position).equalsIgnoreCase("asdsadas")
                    && eventSource.get(position + 1).equalsIgnoreCase(
                            "fdgdfgfd")
                    || eventSource.get(position).equalsIgnoreCase(
                            "dfgdfgdfg")
                    && eventSource.get(position + 1).equalsIgnoreCase(
                            "jgghjhhgg")) {
                convertView = mInflater.inflate(R.layout.list_adapter, null);
            } else {
                convertView = mInflater.inflate(R.layout.list_adapterthinline,
                        null);
            }

我正在根据情况膨胀一个新的布局。它第一次工作,但在我向下滚动并出现视图更改后。一切都搞混了。

我也尝试在 Activity 中设置分隔线高度,就像这样,我也在 onCreate 和 onScroll 侦听器中调用了“setdivider”方法。

public void setdivider() {
        // TODO Auto-generated method stub
        for (int i = 0; i < listSource.size() - 1; i++) {


            if (!listSource.get(i).equalsIgnoreCase(
                    listSource.get(i + 1))) {
                Log.v("inside not equals", "become smalllllllllllllllll");
                list.setDivider(red);
                list.setDividerHeight(5);
            } else if (listSource.get(i).equalsIgnoreCase(
                    listSource.get(i + 1))) {
                Log.v("inside equals", "become bigggggggggggg");
                list.setDivider(blue);
                list.setDividerHeight(10);
            }
        }
    }

但是这里即使两个日志注释都显示在 LogCat 上,但列表中只设置了一个分隔符。
请告诉我哪里出错了,或者建议一些其他方法,如果有的话。

4

2 回答 2

1

ListView缓存视图,因此当您滚动时,视图会被重用。这就是为什么convertView不总是为空的。但是,由于您有两种不同的视图,因此您需要将其告知给您,ListView以便convertView您返回的是您想要的那种。您可以通过实施Adapter.getItemViewType()and来做到这一点Adapter.getViewTypeCount()

在您的示例中,您将getViewTypeCount返回 2,getItemViewType如果是分隔符则返回 1,否则返回 0。

于 2012-05-03T06:52:26.570 回答
0

将布局 R.layout.list_adapter 和 R.layout.list_adapterthinline 合并为一个布局。

并默认设置细线消失。并在需要时将其设置为可见

.....你的布局在这里。

当你需要线路时。

convertView.findViewById(R.id.thin_line).setVisible(View.Visible)

当你不需要它时。

convertView.findViewById(R.id.thin_line).setVisible(View.Gone)

于 2012-05-03T05:19:01.197 回答