2014-12-31 13 views
28

Wydaje się, że będzie to proste rozwiązanie, ale wydaje się, że ustawienieLinearLayoutManager setReverseLayout() == true ale elementy układać od dołu

private RecyclerView mRecyclerView; 
private RecyclerView.Adapter mAdapter; 
private LinearLayoutManager mLayoutManager; 

.... // More code 

    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 

    // Add item decoration 
    mRecyclerView.addItemDecoration(new SpacesItemDecoration(DIVIDER_SPACE)); 

    // use this setting to improve performance if you know that changes 
    // in content do not change the layout size of the RecyclerView 
    mRecyclerView.setHasFixedSize(true); 

    // use a linear layout manager 
    mLayoutManager = new LinearLayoutManager(getActivity()); 
    mLayoutManager.setReverseLayout(true); // THIS ALSO SETS setStackFromBottom to true 
    mRecyclerView.setLayoutManager(mLayoutManager); 

Wydaje się również ustawić elementy na stosie z dolnej

Próbowałem ustawić wartość setStackFromBottom na wartość false, ale to nic nie dało, jaki byłby najlepszy sposób odwrócenia kolejności elementów, ale nadal wypełnia się od góry? Czy powinienem zamiast tego używać klasy Custom Comparator? Miałem nadzieję, że będzie to łatwiejszy proces niż stworzenie innej klasy.

Odpowiedz

76

od docs dla setReverseLayout

Używane odwrócić kolejność i przechodzenie elementu układu. Zachowuje się podobnie do zmiany układu dla widoków RTL. Po ustawieniu wartości true pierwszy element jest ułożony na końcu interfejsu użytkownika, drugi element jest ułożony przed nim itp. W przypadku układów poziomych zależy to od kierunku układu. Po ustawieniu wartości true, jeśli RecyclerView jest LTR, niż będzie układ z RTL, jeśli RecyclerView} jest RTL, będzie układany z LTR. Jeśli szukasz dokładnie w tym samym zachowanie setStackFromBottom(boolean) użyć setStackFromEnd(boolean)

Tak, spróbuj również używając setStackFromEnd(boolean) na przykład LinearLayoutManager,

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); 
mLayoutManager.setReverseLayout(true); 
mLayoutManager.setStackFromEnd(true); 
+0

Dobra robota, który był łatwy :) – AndyRoid

+0

Dzięki, próbowałem obu metod oddzielnie, nawet nie mieć myśl o użyciu ich razem, aby uzyskać wynik :) – AndroidEx

+0

nie działa dla mnie .... zmienia stos również –

24

Zaakceptowanych odpowiedź działa dobrze i poszedłem przez trudy do sprawiają, że działa, ponieważ otrzymuję błąd can not resolve method setReverseLayout.

Potem po poszukiwaniu rozwiązań znalazłem tam głupi błąd. Używałem RecyclerView.LayoutManager zamiast LinearLayoutManager.

Tak więc pomyślałem, aby usunąć zamieszanie w tym miejscu, muszę to potraktować jako odpowiedź.

Nie używaj RecyclerView.LayoutManager zamiast LinerarLayoutManager

// Declare your RecyclerView and the LinearLayoutManager like this 
private RecyclerView mRecyclerView; 
private LinearLayoutManager mLayoutManager; 

...

// Now set the properties of the LinearLayoutManager 
mLayoutManager = new LinearLayoutManager(MainActivity.this); 
mLayoutManager.setReverseLayout(true); 
mLayoutManager.setStackFromEnd(true); 

// And now set it to the RecyclerView 
mRecyclerView.setLayoutManager(mLayoutManager); 
mRecyclerView.setAdapter(yourAdapter); 
Powiązane problemy