我有一个ListView
,我正在填充Cursor
的数据。我有CursorAdapter
,我希望最后一个项目与其他项目具有不同的边距。
以前我用它来ArrayAdapter
(并且效果很好)
float valueDips = 10.0f;
float scale = context.getResources().getDisplayMetrics().density;
int valuePx = (int) (valueDips * scale + 0.5f);
if(position==0)
{
View ll = view.findViewById(R.id.linear_girl);
MarginLayoutParams margins = (MarginLayoutParams) ll.getLayoutParams();
margins.topMargin = valuePx;
ll.setLayoutParams(margins);
}
if(position==data.size()-1)
{
View ll = view.findViewById(R.id.linear_girl);
MarginLayoutParams margins = (MarginLayoutParams) ll.getLayoutParams();
margins.bottomMargin = valuePx;
ll.setLayoutParams(margins);
}
现在我想在position
语句中使用相同的更改cursor.getPosition()
到if
,但它只是不起作用,因为,例如,许多项目获得了topMargin就像if()
中的那个。
我想从光标创建一个Object并继续使用ArrayAdapter
,但我认为这会有较低的性能,对吧?
答案 0 :(得分:0)
使用if(cursor.isFirst())来检查第一项,和 if(cursor.isLast())用于检查最后一项。
答案 1 :(得分:0)
在listview的情况下,Android重新使用视图(列表项视图)。因此,当您为第一个视图设置边距时,许多其他视图也具有相同的边距。为了解决这个问题,您只需设置每个项目的边距即可。做如下。
if(cursor.getPosition()==0 || cursor.getPosition()==data.size()-1)
{
View ll = view.findViewById(R.id.linear_girl);
MarginLayoutParams margins = (MarginLayoutParams) ll.getLayoutParams();
margins.topMargin = valuePx;
ll.setLayoutParams(margins);
}
else
{
//Set to the original value you have
View ll = view.findViewById(R.id.linear_girl);
MarginLayoutParams margins = (MarginLayoutParams) ll.getLayoutParams();
margins.topMargin = original_value;
ll.setLayoutParams(margins);
}
答案 2 :(得分:-1)
您可以使用列表视图的页眉和页脚视图。
View header, footer;
header = getLayoutInflater().inflate(R.layout.headerlayout, null);
footer = getLayoutInflater().inflate(R.layout.footerlayout, null);
listView.addFooterView(footer);
listView.addHeaderView(header);