Single Item上的Android StickyListHeaders

时间:2013-01-15 02:48:21

标签: android android-layout android-listview

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

}

2 个答案:

答案 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的标题。