2016-08-02 10 views
1

Ich möchte, dass mein erstes Element in der Recycler-Ansicht von Startliste versetzt haben. first position when scroll downRecyclerView mit Start Offset

Ich versuche

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

verwenden, aber es funktioniert nicht. Ich verstehe, dass ich leere Ansicht wie Null Element in der Liste verwenden kann, aber es ist keine perfekte Lösung.

+1

Sie sind zwei Lösung 1) Verwenden Sie einfach zwei Arten von Ansichten 2) Fügen Sie paddingTop zu Ihrem Recyclerview hinzu und fügen Sie clipToPadding false hinzu. – JCDecary

+0

Ich verstehe erste Lösung nicht, aber zwei Lösung ist Arbeit !!! Vielen Dank –

Antwort

3

Erste Lösung:

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

zweite Lösung: add paddingTop zu Ihrem recyclerview, und fügen Sie falsche clipToPadding.

0

Ich fand eine Lösung und es funktioniert super. Zuerst müssen Sie den letzten Versatzwert für Ihre Recycler-Ansichten ermitteln.

int offset = recyclerView.computeVerticalScrollOffset(); 

Oder Sie können Ihren Offset-Wert zuweisen. Nachdem Sie Ihren Adapter eingerichtet haben, können Sie den Offset wie folgt einstellen.

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

Sein Mittelwert; llm Scroll-Position auf 0 (Start) und dann auf Offset. Ich hoffe es hilft!