CursorAdapter和cursor.getPosition()不起作用

时间:2014-03-12 13:38:13

标签: android listview android-cursoradapter

我有一个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,但我认为这会有较低的性能,对吧?

3 个答案:

答案 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);