1

我正在使用库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;
    }

}
4

2 回答 2

5

@Override public long getHeaderId(int position) { return 1; }

如果您在此处返回 1,则每个项目(在每个位置)的 headerId 都将为 1。因此,您只会在最顶部获得一个标题。这种行为是正确的。

您应该只为应该分组在同一标题下的项目返回相同的 id。例如,如果您要返回 position/3; 每三个项目都会有一个标题。

希望这可以解决问题:)

于 2013-01-30T14:23:30.983 回答
0

您将需要遵循他们的示例,因为他们完全按照您希望在他们的示例中执行的操作:

@Override
public long getHeaderId(int position) {
  if (position == 0) {
    return -1;
  } else {
    return 1;
  }
}

这将跳过第一个位置并返回位置 1 的标题。

于 2015-10-17T15:16:12.490 回答