2016-08-02 4 views
1

Я хочу, чтобы мой первый элемент в просмотре ресайлера смещался по стартовому списку. first position when scroll downRecyclerView с смещением начала

Я пытаюсь использовать

void onCreate(Bundle savedInstanceState){ 
... 
    linearLayoutManager.scrollToPositionWithOffset 
... 
} 

Но это не работает. Я не знаю, что я могу использовать пустой вид, как нулевой элемент в списке, но это не идеальное решение.

+1

Это два решения. 1) Просто используйте два вида просмотров. 2) добавьте paddingTop к вашему recyclerview и добавьте clipToPadding false. – JCDecary

+0

Я не понимаю первое решение, но два решения - это работа !!! Большое спасибо –

ответ

3

Первое решение:

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 ложь.

0

Я нашел решение, и он отлично работает. Сначала вам нужно получить последнее значение смещения recyclerviews;

int offset = recyclerView.computeVerticalScrollOffset(); 

Или вы можете присвоить значение смещения. Затем, после того как вы установите адаптер, вы можете установить смещение, как показано ниже.

recyclerView.setAdapter(Adapter.this); 
LinearLayoutManager llm = (LinearLayoutManager) 
recyclerView.getLayoutManager(); 
llm.scrollToPositionWithOffset(0,-1*offset); 

Его средний; llm прокрутить позицию до 0 (начало), а затем спускается до смещения. Надеюсь, это поможет!

Смежные вопросы