2015-07-30 20 views
7

Używam RecyclerView w kierunku poziomym, a New element od lewej do prawej. a przewijanie to ltr. jak zmienić ten kierunek?RecyclerView Grow Element Od prawej do lewej

enter image description here

Xml Kod:

<android.support.v7.widget.RecyclerView 
        android:id="@+id/rc3" 
        android:layout_gravity="right" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" /> 

i Java:

RecyclerView rc1 = (RecyclerView) findViewById(R.id.rc1); 
    AdapterMainPrice mainPrice = new AdapterMainPrice(StructPrice.getThreePrice()); 
    rc1.setHasFixedSize(false); 
    LinearLayoutManager llm = new LinearLayoutManager(G.context); 
    llm.setOrientation(LinearLayoutManager.HORIZONTAL); 
    rc1.setLayoutManager(llm); 
    rc1.setAdapter(mainPrice); 

Adapter:

public class AdapterMainPrice rozciąga RecyclerView.Adapter {

private List<StructPrice> prices; 

public AdapterMainPrice(List<StructPrice> catList) { 
    this.prices = catList; 

} 


@Override 
public int getItemCount() { 
    return prices.size(); 
} 


@Override 
public void onBindViewHolder(NewsViewHolder ghazaViewHolder, int position) { 

    StructPrice price = prices.get(position); 
    ghazaViewHolder.vTitle.setText(price.getProductName()); 
    Glide.with(G.context) 
      .load(price.getProductPic()) 
      .placeholder(R.drawable.loading_spinner) 
      .crossFade() 
      .into(ghazaViewHolder.Vimg); 
    ghazaViewHolder.cardView.startAnimation(ghazaViewHolder.animation); 
} 

@Override 
public NewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View itemView = LayoutInflater. 
      from(viewGroup.getContext()). 
      inflate(R.layout.adapter_item_main, viewGroup, false); 
    return new NewsViewHolder(itemView); 
} 

public static class NewsViewHolder extends RecyclerView.ViewHolder { 
    protected TextView vTitle; 
    protected ImageView Vimg; 
    protected Animation animation; 
    protected CardView cardView; 

    public NewsViewHolder(View v) { 
     super(v); 
     vTitle = (TextView) v.findViewById(R.id.mainRCtv); 
     Vimg = (ImageView) v.findViewById(R.id.mainRCimg); 
     animation = AnimationUtils.loadAnimation(G.context, R.anim.fadein); 
     cardView = (CardView) v.findViewById(R.id.mainRCCard); 
    } 


} 
+1

Możliwy duplikat [Jak mogę wypełnić RecyclerView za pomocą GridLayoutManager od prawej do lewej] (http://stackoverflow.com/questions/32920867/how-can-i-fill-recyclerview- with-gridlayoutmanager-from-right- do lewej) –

Odpowiedz

35

to jest całkiem proste, wystarczy zadzwonić setReverseLayout (prawda) dla LayoutManager:

LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true); 
     layoutManager.setReverseLayout(true); 

wyjaśnione jest w jego dokumentacji:

/** 
* Used to reverse item traversal and layout order. 
* This behaves similar to the layout change for RTL views. When set to true, first item is 
* laid out at the end of the UI, second item is laid out before it etc. 
* 
* For horizontal layouts, it depends on the layout direction. 
* When set to true, If {@link android.support.v7.widget.RecyclerView} is LTR, than it will 
* layout from RTL, if {@link android.support.v7.widget.RecyclerView}} is RTL, it will layout 
* from LTR. 
* 
* If you are looking for the exact same behavior of 
* {@link android.widget.AbsListView#setStackFromBottom(boolean)}, use 
* {@link #setStackFromEnd(boolean)} 
*/ 
public void setReverseLayout(boolean reverseLayout) { 
    assertNotInLayoutOrScroll(null); 
    if (reverseLayout == mReverseLayout) { 
     return; 
    } 
    mReverseLayout = reverseLayout; 
    requestLayout(); 
} 
5

Okazało się, jak to zrobić, wszystko co musisz ustawić

linearLayoutManager.setStackFromEnd (true);

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
       linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 
       linearLayoutManager.setStackFromEnd(true); 
1

Można go dodawać bezpośrednio z XML dodając atrybut app:reverseLayout:

<android.support.v7.widget.RecyclerView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" 
    app:layout_constraintEnd_toStartOf="@+id/imageButton2" 
    app:layout_constraintTop_toTopOf="@+id/imageButton2" 
    app:reverseLayout="true" 
    tools:listitem="@layout/images_new_post_item" /> 
1

To proste!

setReverseLayout (true)

RecyclerAdapterHoTarakoneshha recyclerAdapterHoTarakoneshha = new RecyclerAdapterHoTarakoneshha(mContext, arrayList); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false); 
    linearLayoutManager.setReverseLayout(true); 
    recyclerTarakonesh.setLayoutManager(linearLayoutManager); 
    recyclerTarakonesh.setHasFixedSize(true); 
    recyclerTarakonesh.addItemDecoration(new HorizntalSpaceItemDecoration(mContext, 10)); 
    recyclerTarakonesh.setAdapter(recyclerAdapterHoTarakoneshha); 
3

Wystarczy użyć tego:

android:layoutDirection="rtl" 

to wszystko :)

1

Bądź układ odwróconej prawda na uzyskanie elementów od prawej do lewej w recyclerview jak kod podany poniżej:

recycler_view.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, true)); // true is for reverse layout value