es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Desplazar RecyclerView a una posición específica cuando comienza el Fragmento.

Estoy creando una aplicación para Android. Quiero crear funcionalidad como en Instagram, para que cuando hagas clic en una notificación, se te lleve inmediatamente al comentario deseado. Y no sé cómo hacerlo. Para los comentarios, estoy usando RecyclerView. Ya he buscado información en Internet y he intentado usar scrollToPosition (), smoothScrollToPosition (), pero no tiene efecto. Tal vez estoy haciendo algo mal. Muchas gracias de antemano.

private void loadUserPosts()
{
mDatabaseReference = FirebaseDatabase.getInstance().getReference().child(“Posts”);

    new SetFirebaseRecyclerAdapter().execute();
}

Clase anidada:

class SetFirebaseRecyclerAdapter extends AsyncTask<Integer, Void, Void>
{
@Override
protected Void doInBackground(Integer… integers) {
FirebaseRecyclerOptions opciones = new FirebaseRecyclerOptions.Builder()
.setQuery(mDatabaseReference.orderByChild(“uid”).equalTo(uid), TestPosts.class)
.build();

        mLinearLayoutManager = new LinearLayoutManager(mContext);
        mLinearLayoutManager.setReverseLayout(true);
        mLinearLayoutManager.setStackFromEnd(true);
        adapter = new TestPostsAdapter(opciones, mContext);

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        mRecyclerView.setLayoutManager(mLinearLayoutManager);
                        mRecyclerView.setAdapter(adapter);
                        mRecyclerView.scrollToPosition(position);
                        adapter.startListening();
                        mRecyclerView.invalidate();

                        mRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
                }
        );



    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el método scrollToPosition() de RecyclerView para lograr la funcionalidad deseada. Para hacer esto, necesita configurar un LinearLayoutManager para el RecyclerView y luego llamar al método scrollToPosition() con la posición deseada como argumento. También puede usar el método smoothScrollToPosition() para desplazarse a la posición deseada con una animación.

    Aquí hay un ejemplo de cómo puede implementarlo:
    “`java
    private void loadUserPosts()
    {
    mDatabaseReference = FirebaseDatabase.getInstance().getReference().child(“Posts”);

        new SetFirebaseRecyclerAdapter().execute();
    }
    

    Clase anidada:

    class SetFirebaseRecyclerAdapter extends AsyncTask<integer, void,=”” void=””>
    {
    @Override
    protected Void doInBackground(Integer… integers) {
    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder()
    .setQuery(mDatabaseReference.orderByChild(“uid”).equalTo(uid), TestPosts.class)
    .build();

            mLinearLayoutManager = new LinearLayoutManager(mContext);
            mLinearLayoutManager.setReverseLayout(true);
            mLinearLayoutManager.setStackFromEnd(true);
            adapter = new TestPostsAdapter(options, mContext);
    
            return null;
        }
    
        @Override
        protected void onPostExecute(Void aVoid) {
            mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
                    new ViewTreeObserver.OnGlobalLayoutListener() {
                        @Override
                        public void onGlobalLayout() {
                            mRecyclerView.setLayoutManager(mLinearLayoutManager);
                            mRecyclerView.setAdapter(adapter);
                            mRecyclerView.scrollToPosition(position);
                            adapter.startListening();
                            mRecyclerView.invalidate();
    
                            mRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        }
                    }
            );
        }
    }
    

    “`</integer,>

Comments are closed.