2013-01-15 34 views
1

我正在使用库StickyListHeaders,我很难弄清楚如何让它适用于我的特定应用程序。我想只在第二个列表项上有一个粘性标题。当我重写getHeaderId()方法并返回1时,它将标题放在列表的最顶部,而不是放在第二项的顶部。滚动也真的很蠢。有没有人用过这个库可以知道发生了什么?单个项目的Android StickyListHeaders

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

} 

回答

5

@覆盖 众长getHeaderId(INT位置){ 返回1; }

如果你在这里返回1,那么每个项目(在每个位置)的headerId都是1.因此,你只在最上面得到一个头。这种行为是正确的。

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

希望这将清除的东西了:)

+0

感谢您的回复。今晚我会放弃它。 – Wenger

+0

因此,如果我只想要第二个项目的标题,我可以做一个if语句,如果位置是1,则返回1,如果位置是其他任何东西,则返回0? – Wenger

+0

我不知道StickyListHeaders的工作原理。我的猜测是,这将导致3个标题(一个在顶部,一个在第二个项目,一个在第三个项目之前)。但你应该试试看。 – MrMaffen

0

你需要,因为他们没有按照他们的样品,你想让它自己的样品中到底该怎么做:

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

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

相关问题