我尝试使用
void onCreate(Bundle savedInstanceState){
...
linearLayoutManager.scrollToPositionWithOffset
...
}
但它不起作用。我不知道我可以使用空视图列表中的零元素,但它不是完美的解决方案。
答案 0 :(得分:4)
第一个解决方案:
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static final int VIEW_HEADER = 1, VIEW_INFO = 2;
private Context context;
public Adapter(Context context) {
this.context = context;
}
@Override
public int getItemViewType(int position) {
if(position == 0) return VIEW_HEADER;
return VIEW_INFO;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType){
case VIEW_HEADER:
return new HeaderViewHolder(LayoutInflater.from(context).inflate(your view));
case VIEW_INFO:
return new InfoViewHolder(LayoutInflater.from(context).inflate(your view));
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof HeaderViewHolder){
}else if (holder instanceof InfoViewHolder){
}
}
@Override
public int getItemCount() {
return your items count + 1; // add the header
}
public static class HeaderViewHolder extends RecyclerView.ViewHolder{
public HeaderViewHolder(View itemView) {
super(itemView);
}
}
public static class InfoViewHolder extends RecyclerView.ViewHolder{
public InfoViewHolder(View itemView) {
super(itemView);
}
}
}
第二个解决方案:将paddingTop添加到您的recyclerview,并添加clipToPadding false。
答案 1 :(得分:0)
我找到了一个解决方案,效果很好。首先,您需要通过以下方式获取Recyclerviews的最后偏移值;
int offset = recyclerView.computeVerticalScrollOffset();
或者您可以指定偏移值。然后在设置适配器后,可以像下面一样设置偏移量。
recyclerView.setAdapter(Adapter.this);
LinearLayoutManager llm = (LinearLayoutManager)
recyclerView.getLayoutManager();
llm.scrollToPositionWithOffset(0,-1*offset);
其意思; llm滚动位置为0(开始)然后向下移动到偏移。 我希望它有所帮助!