web-dev-qa-db-ja.com

LinearLayoutManager setReverseLayout()== trueであるが、アイテムは下からスタックする

これは簡単な解決策のように思えますが、設定は

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

アイテムを下から積み重ねるように設定しているようです

setStackFromBottomをfalseに設定しようとしましたが、それは何もしませんでした。アイテムの順序を逆にするが、それでも上からデータを取り込む最良の方法は何でしょうか?代わりにカスタムコンパレータクラスを使用する必要がありますか?私は、これが別のクラスを作成するよりも簡単なプロセスになることを望んでいました。

38
AndyRoid

setReverseLayout のドキュメントから

アイテムの走査とレイアウトの順序を逆にするために使用されます。これは、RTLビューのレイアウト変更と同様に動作します。 trueに設定すると、最初のアイテムがUIの最後に配置され、2番目のアイテムがその前に配置されるなど。水平レイアウトの場合、レイアウト方向に依存します。 trueに設定すると、RecyclerViewがLTRの場合、RTLからレイアウトされ、RecyclerView}がRTLの場合、LTRからレイアウトされます。 setStackFromBottom(boolean)とまったく同じ動作を探している場合は、setStackFromEnd(boolean)を使用します

したがって、LinearLayoutManagerインスタンスで setStackFromEnd(boolean) も使用してみてください。

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
110
petey

受け入れられた答えはうまく機能し、can not resolve method setReverseLayoutエラーを受け取っていたので、それを機能させるのに苦労しました。

その後、解決策を探した後、そこに愚かな間違いがあることがわかりました。 LinearLayoutManagerの代わりにRecyclerView.LayoutManagerを使用していました。

だから私はこの辺りの混乱を取り除こうと思ったので、答えとしてそれを置く必要がある。

LinearLayoutManagerの代わりにRecyclerView.LayoutManagerを使用しないでください

// 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);
29
Reaz Murshed

Xmlを使用してこれを解決する効果的な方法を見つけました。

app:layoutManager="Android.support.v7.widget.LinearLayoutManager"
app:stackFromEnd="true"
1
Kirk_hehe