如何在ListView中仅显示偶数位置项?

时间:2015-12-16 06:13:52

标签: android android-listview adapter

我从数据库获取数据并使用ListView中的自定义list adapter进行显示。我需要在ListView中只显示偶数位置项。

我能够以两种方式解决这个问题。

1.在附加到适配器之前对数据进行排序,但我想在适配器的getView()方法中使用适配器中的其他可用方法执行这些任务。

2.

@Override
public View getView(int position, View convertView, ViewGroup parent)  
{
   if( position%2 == 0 ) {
      // display
   } else {
      // not display
   }
return view;

在这个我得到备用视图是空视图..我想避免这些空视图。

我要在getView()方法中进行所有计算,而在ListView中没有空视图。我怎么能这样做?

6 个答案:

答案 0 :(得分:1)

我建议您使用过滤后的数据创建新列表,并在适配器中使用它。如果你想要一个替代解决方案,你可以尝试下面的代码:

@Override
public int getCount() {
     int halfCountOfList = itemList.size()/2;
     // Add +1 in halfCountOfList if itemList size is odd.
     int finalCount = halfCountOfList + itemList.size()%2;
     return finalCount;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)  {

    Item item = getItem(position*2);
    //No need to to check for even item

    return view;
}

答案 1 :(得分:1)

不,只是没有。这是一个非常糟糕的主意。

不要这样做。这没有道理。考虑一下:getView()被调用是因为项目需要View。现在就是否需要在ListView中显示此项目做出任何决定为时已晚,已经必须显示。您要做的不是ListViewAdapter的工作方式。

只需在将List传递给Adapter之前对其进行过滤,您可以通过List上的getter方法公开Adapter来修改notifyDataSetChanged()。然后立即致电Adapter。任何其他与此不同的解决方案或试图让RecyclerView像你期望的那样工作只会是一个脆弱的黑客,永远不应该被使用。

PS:使用ListView代替ALTER TABLE... ADD CONSTRAINT...。它好多了。

答案 2 :(得分:0)

如果您为ListView适配器提供一组要显示的数据,它将尝试在需要时对所有数据调用getView() - 它不会区分。关于如何显示它的决定是在getView()函数中做出的。

这两个选项是修改数据集,或仅为您的偶数索引值提供完整的视图。不幸的是,没有其他方法可以解决这个问题。

答案 3 :(得分:-1)

制作另一个列表,其中只包含偶数位置项并将其传递给适配器。适配器将为列表中的所有项调用getView方法。

答案 4 :(得分:-2)

在适配器中创建另一个函数

public int getItemViewType(int position) {
        // return a value between 0 and (getViewTypeCount - 1)
        return position % 2;
    }

之后在GetView()方法中

int viewType = getItemViewType(position);
    switch (viewType) {
    case 0:
        layoutResource = ;//Even Item
        break;

    case 1:
        layoutResource = ;//Odd Item
        break;
    }

答案 5 :(得分:-2)

IF 您的数据将是某些objectType,数据库将返回

$(document).ready(function(){

    $('.right_col').scroll(function(){

        var scrollTop = $(this).scrollTop(),
            innerHeight = $(this).innerHeight(),
            documentElement = $(this)[0].scrollHeight,
            rowCount = $('#rowCount').val(),
            topic = $('#topic_id').val();

            if (scrollTop + innerHeight >= documentElement)
            {
                // var counter = 0,
                //  comment_id = 0;

                $.ajax({
                    type: 'get',
                    url: '/comments/fetch_comments/'+ rowCount +'/'+ topic,
                    cache: 'false',
                    dataType: 'JSON',
                    contentType: 'application/json; charset=utf-8',
                    beforeSend: function()
                    {
                        $('.loader-container').css('display','block');
                    },
                    success: function(response)
                    {

                        $('.loader-container').css('display','none');

                        if (response[0] !== undefined)
                        {

                            for (var i in response)
                            {
                                console.log(response[i]['Comment']);

                                console.log(response);
                                var newVal = parseInt(rowCount) + 5;

                                var html = "<div class='row'>"+
                                                "<div class='col-md-12'>"+
                                                    "<div class='x_panel'>"+
                                                        "<div class='comment_wrapper'>"+
                                                            "<div class='comment_profile_pic'>"+
                                                                "<img src='/custom/images/user.png' alt='avatar'/>"+
                                                            "</div>"+
                                                            "<div class='content'>"+
                                                                "<a><b>"+ escapeHtml(response[i]['User'].lastname.capitalize()) +', '+ escapeHtml(response[i]['User'].firstname.capitalize()) +' '+ escapeHtml(response[i]['User'].middlename.capitalize()) +"</b></a>"+
                                                                "<a class='timestamp'> "+ response[i]['Comment'].created +"</a>"+
                                                            "</div>"+
                                                        "</div>"+
                                                    "</div>"+
                                                "</div>"+
                                            "</div>";


                                $('#rowCount').val(newVal);
                                $('#comment-block').append(html);
                            }
                        }
                    }
                });
            }

    });

    String.prototype.capitalize = function()
    {
        return this.charAt(0).toUpperCase() + this.slice(1);
    }
    function escapeHtml(text) {

        var map = {
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;',
            '"': '&quot;',
            "'": '&#039;'
        };

        return text.replace(/[&<>"']/g, function(m) { return map[m]; });
    }

});

然后你可以这样做

例如: -

ArrayList<Object>,