我从数据库获取数据并使用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中没有空视图。我怎么能这样做?
答案 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
中显示此项目做出任何决定为时已晚,已经必须显示。您要做的不是ListView
和Adapter
的工作方式。
只需在将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 = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}
});
然后你可以这样做
例如: -
ArrayList<Object>,