【问题标题】:Listview custom ListDividerListview 自定义 ListDivider
【发布时间】:2013-02-25 08:01:42
【问题描述】:

我实际上是通过填充数据库中的项目来创建一个 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);
            }
        }
    }

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

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

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

    在您的示例中,您可以让 getViewTypeCount 返回 2,如果是分隔符,则让 getItemViewType 返回 1,如果不是,则返回 0。

    【讨论】:

    【解决方案2】:

    合并布局 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)

    【讨论】:

    • 感谢您的回答;但这不起作用。它和我做的一样。它显示正确,但在向下滚动和向上滚动后变得混乱。我想创建的视图被重用了,并且分隔符混淆了。
    • 我想你忘记设置细线了。
    • 没有。我没有忘记它。我也这样做了。
    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 2012-06-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2014-05-27
    • 2015-06-23
    相关资源
    最近更新 更多