FirebaseRecyclerAdapter con AsyncTask
Estoy creando mi aplicación y necesito llenar el recyclerview y luego desplazarme hacia el elemento deseado. Para hacer esto, utilicé AsyncTask, pero el problema es que scrollToPosition() no funciona. Tal vez alguien pueda decirme qué estoy haciendo mal, ya que es la primera vez que trabajo con AsyncTask y no entiendo cuál es mi error.
public class SomeUserProfileFragment extends Fragment {
private void loadUserPosts() {
mDatabaseReference = FirebaseDatabase.getInstance().getReference().child(“Posts”);
new SetFirebaseRecyclerAdapter().execute();
}
class SetFirebaseRecyclerAdapter extends AsyncTask<integer, void,=”” void=””>{
@Override
protected Void doInBackground(Integer… integers) {
FirebaseRecyclerOptions
.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.setLayoutManager(mLinearLayoutManager);
mRecyclerView.setAdapter(adapter);
mRecyclerView.scrollToPosition(1);
adapter.startListening();
}
}
}</integer,>
davy.ai
Parece que el problema está en el uso del método scrollToPosition() en el método onPostExecute(). Este método se ejecuta en el hilo principal de la interfaz de usuario después de que el método doInBackground() complete su ejecución, por lo que debería ser seguro usar el método scrollToPosition() dentro de él.
Sin embargo, es posible que el RecyclerView aún no haya terminado de renderizar sus elementos en el momento en que se llama al método scrollToPosition(), lo que podría ser la razón por la que no funciona. Una solución es esperar a que el RecyclerView termine de renderizar agregando un listener y luego llamando al método scrollToPosition() dentro de él.
Aquí hay una versión actualizada del código con el listener agregado:
Con este código actualizado, el listener espera a que el RecyclerView termine de renderizar y luego llama a scrollToPosition() dentro de él.</integer,>