0

How do I view the latest item at the top of the RecyclerView? Can you please tell me the code?

ImagesActivity.java

This is my ImagesActivity Java code of my project. Can you please tell me how to view RecyclerView items in reverse order i.e latest item at top?

public class ImagesActivity extends AppCompatActivity {
  private RecyclerView mRecyclerView;
  private ImageAdapter mAdapter;
  private ProgressBar mProgressCircle;
  private DatabaseReference mDatabaseRef;
  private List<Upload> mUploads;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_images);
    mRecyclerView = findViewById(R.id.recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mProgressCircle = findViewById(R.id.progress_circle);
    mUploads = new ArrayList<>();
    mDatabaseRef = FirebaseDatabase.getInstance().getReference("uploads");
    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Upload upload = postSnapshot.getValue(Upload.class);
                mUploads.add(upload);
            }
            mAdapter = new ImageAdapter(ImagesActivity.this, mUploads);
            mRecyclerView.setAdapter(mAdapter);
            mProgressCircle.setVisibility(View.INVISIBLE);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(ImagesActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            mProgressCircle.setVisibility(View.INVISIBLE);
        }
    });
}
}

ImageAdapter.java

This is my Adapter Java class of my project.

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
  private Context mContext;
  private List<Upload> mUploads;

  public ImageAdapter(Context context, List<Upload> uploads) {
    mContext = context;
    mUploads = uploads;
  }
  @Override
  public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
    return new ImageViewHolder(v);
  }
  @Override
  public void onBindViewHolder(ImageViewHolder holder, int position) {
    Upload uploadCurrent = mUploads.get(position);
    holder.textViewName.setText(uploadCurrent.getName());
    Picasso.with(mContext)
            .load(uploadCurrent.getImageUrl())
            .placeholder(R.mipmap.ic_launcher)
            .fit()
            .centerCrop()
            .into(holder.imageView);
  }
  @Override
  public int getItemCount() {
    return mUploads.size();
  }
  public class ImageViewHolder extends RecyclerView.ViewHolder {
    public TextView textViewName;
    public ImageView imageView;
    public ImageViewHolder(View itemView) {
        super(itemView);
        textViewName = itemView.findViewById(R.id.text_view_name);
        imageView = itemView.findViewById(R.id.image_view_upload);
    }
  }
}
rgettman
  • 176,041
  • 30
  • 275
  • 357

3 Answers3

6

From here it is clear that you are binding view using private List<Upload> mUploads; All you need to do is reverse this list by using this simple code :

ArrayList<ModelNAme> list = getList();
Collections.reverse(list);
Aniket
  • 391
  • 5
  • 13
4

When setting your RecyclerView's LayoutManager, tell it to setStackFromEnd(true);

    LinearLayoutManager layoutManager = new LinearLayoutManager(mActivity);
    layoutManager.setStackFromEnd(true);
    mRecyclerView.setLayoutManager(layoutManager);
IsaiahJ
  • 454
  • 7
  • 19
4

LinearLayoutManager LayoutManager =new LinearLayoutManager(getApplicationContext);

LayoutManager.setReverseLayout(true);

LayoutManager.setStackFromEnd(true);

abjal mor
  • 103
  • 5