2016-08-02 16 views
1

私はリサイクラビューの最初の要素が開始リストによってオフセットされていることを望みます。 first position when scroll down開始オフセットを持つRecyclerView

私は

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

を使用してみてくださいしかし、それは動作しません。私は、空のビューをどのようにリスト内のゼロ要素で使うことができるのかとは考えていませんが、完璧な解決策ではありません。

+1

2つの解決方法があります。1)2種類のビューを使用します。2)paddingTopをrecyclerviewに追加し、clipToPadding falseを追加します。 – JCDecary

+0

私は最初の解決策を理解していませんが、2つの解決策は仕事です!本当にありがとう –

答えて

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); 
     } 
    } 
} 

第二の溶液:あなたのrecyclerviewにpaddingTopを追加して、偽clipToPadding追加します。

0

解決策が見つかりました。まず、あなたのrecyclerviewsを最後のオフセット値で取得する必要があります。

int offset = recyclerView.computeVerticalScrollOffset(); 

または、オフセット値を割り当てることができます。アダプタを設定した後、オフセットを以下のように設定することができます。

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

llmの位置を0(開始)にスクロールし、次にオフセットに移動します。 私はそれが助けてくれることを願っています!

関連する問題