Java Android ListView-第n个元素后的分隔符
我需要在从mysqli游标生成的列表视图中的第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
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;
}
}