Java Android ListView-第n个元素后的分隔符

Java Android ListView-第n个元素后的分隔符,java,android,listview,android-cursor,divider,Java,Android,Listview,Android Cursor,Divider,我需要在从mysqli游标生成的列表视图中的第n个元素之后放置一个分隔符。我创建了尝试这样做的自定义适配器,如下所示: MyAdapter extends CursorAdapter { ... blablabla yadayadayada ... @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { f

我需要在从mysqli游标生成的列表视图中的第n个元素之后放置一个分隔符。我创建了尝试这样做的自定义适配器,如下所示:

MyAdapter extends CursorAdapter {

     ...
     blablabla
     yadayadayada
     ...

     @Override
     public View newView(Context context, Cursor cursor, ViewGroup parent) {

         final View view;
         int pos = cursor.getPosition();
         int beforeLast = GameData.totalPlayers-1;
         if (pos == beforeLast) {
             view = mInflater.inflate(R.layout.player_details_divider, parent, false);
         } else {
             view = mInflater.inflate(R.layout.player_details, parent, false);
         }
         return view;
     }
}
正如你所看到的,它应该为一个位置-1上的元素膨胀不同的视图。当数字足够小时,它非常有效:1到6。但当它变大时,它就停止工作了

我试着调试这个东西,我注意到它呈现了6个项目-这是列表元素在屏幕上的适合程度-并通过循环将pos增加6倍到5。然后它停止了。当我开始滚动列表时,它再次运行循环,将pos增加到6,然后停止。无论有多少个元素,它都不会将pos增加到7(尽管所有数据都存在于列表中,所以游标必须迭代到末尾)


你知道它为什么会这样吗?我不理解/做错了什么?

问题似乎是由于
列表视图
回收造成的<代码>列表视图将尝试对项目重复使用相同的视图。因此,在您的情况下,将为前6个可见项目调用
newView
,当您滚动
ListView
时,将为列表中的下6个项目调整相同的6个项目视图的大小

您需要更新
列表视图
,即您有两个不同的项目视图,以便它知道您的最后一个项目视图与其他项目视图不同

您需要
覆盖
getViewTypeCount
并返回两个不同的视图

@Override
public int getViewTypeCount() {
    return 2; // return the view type
}
另外,
覆盖
获取项目视图类型
,并通知
列表视图
上一个位置视图是不同的

Override
public int getItemViewType(int position){
    int beforeLast = GameData.totalPlayers-1;
    // return a unique number
    if(beforeLast == position) {
        return 1; // some unique id
    }else {
        return 0;
    }
}