我正在使用库StickyListHeaders,我很难弄清楚如何让它适用于我的特定应用程序。我想只在第二个列表项上有一个粘性标题。当我覆盖getHeaderId()方法并返回1时,它将标题放在列表的最顶部而不是第二个项目的顶部。滚动也很疯狂。有没有人使用这个图书馆取得了一些成功,可能知道发生了什么?
我正在使用MergeAdapter,因此可能导致获取我将其设置为ListView的位置的问题?
这是我的适配器代码:
private class ProfileMergeAdapter extends MergeAdapter implements StickyListHeadersAdapter{
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
LayoutInflater nameInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (RelativeLayout) nameInflater.inflate(R.layout.name_line, null);
convertView.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
profilePhotoBottom = (ImageView) convertView.findViewById(R.id.profile_pic_bottom);
TextView userName = (TextView) convertView.findViewById(R.id.userName);
userName.setText(Utility.userName);
profilePhotoBottom.setImageBitmap(photoBMPbot);
return convertView;
}
@Override
public long getHeaderId(int position) {
return 1;
}
}
答案 0 :(得分:5)
@覆盖 public long getHeaderId(int position){ 返回1; }
如果你在这里返回1,那么每个项目(在每个位置)的headerId都是1.因此你只能在最顶部获得一个标题。这种行为是正确的。
对于应在同一标题下分组的项目,您应该只返回相同的ID。 例如,如果你要返回position / 3;每三个项目都会有一个标题。
希望这能解决问题:)
答案 1 :(得分:0)
您需要按照他们的样本进行操作,因为他们完全按照您希望的样本进行操作:
@Override
public long getHeaderId(int position) {
if (position == 0) {
return -1;
} else {
return 1;
}
}
这将跳过第一个位置并返回位置1的标题。