web-dev-qa-db-fra.com

RecyclerView: Définissez la position de défilement de sorte que l'élément apparaisse au bas de la vue

J'ai une RecyclerView avec une LinearLayoutManager appuyée par un adaptateur avec des éléments de hauteur différente . Existe-t-il un moyen de demander à RecyclerView de définir la position de défilement de sorte que l'élément X apparaisse (plus ou moins) exactement au bas de l'écran?

J'ai essayé LinearLayoutManager.scrollToPosition() mais cela positionnera l'élément en haut de la vue.

5
Kirill Rakhman
MyAdapter mAdapter;
RecyclerView recyclerView;
List<ItemData> data = new ArrayList<>();
LinearLayoutManager llm = new LinearLayoutManager(this);

essayez ceci dans la méthode OnCreate

recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(llm);
llm.setStackFromEnd(true);
mAdapter = new MyAdapter(data, getApplication());
recyclerView.setAdapter(mAdapter);

et quand vous insérez un article, essayez ceci

mAdapter.notifyItemInserted(data.size() - 1);
llm.scrollToPosition(data.size() - 1);
2
giannisj5

Essayez ceci dans mainActivity.class

 rv_journey.setAdapter(ca);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    scrollList();
                }
            }, 500);

Voici ma méthode de défilement

private void scrollList(){
        rv_journey.post(new Runnable() {
            @Override
            public void run() {
                // Call smooth scroll
                rv_journey.smoothScrollToPosition(Index);
            }
        });
    }

Définissez l'index de la classe Adapter qui étend RecyclerView.Adapter à l'endroit où vous devez faire défiler ...

if (Condition) {
                        mainActivity.Index=position+1;

                    }
                } 

Bonne codage ...

1
sk sakil