簡體   English   中英

我想在 recyclerview 開始時顯示上傳到 firebase 存儲的最新圖像

[英]i want to display the newest image uploaded to firebase storage at the start of recyclerview

我正在將圖像上傳到 firebase 存儲,然后將該圖像的名稱和 url 推送到數據庫中。 接下來我正在檢索圖像 url,以在我的 recyclerview 中顯示圖像。 現在我想在 recyclerview 開始時顯示上傳到 firebase 存儲的最新圖像。 如何更改 Firebase 數據庫中的順序?

現在,您添加的第一張圖像是數據庫中的第一張圖像。 我想要用戶上傳的最新圖像,該圖像的 url 應該在 firebase 數據庫的頂部。

每一張圖片

Name: tom
Desc: 1
Url: any

Name: miki
Desc: 2
Url: any

描述: 1 是最舊的

描述: 2 是最新的

如何更改訂單請給我完整的代碼

壁紙活動

public class WallpapersActivity extends AppCompatActivity {

List<Wallpaper> wallpaperList;
List<Wallpaper> favList;
RecyclerView recyclerView;
WallpapersAdapter adapter;

DatabaseReference dbWallpapers, dbFavs;
ProgressBar progressBar;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wallpapers);


    Intent intent = getIntent();
    final String category = intent.getStringExtra("category");

    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle(category);
    setSupportActionBar(toolbar);

    favList = new ArrayList<>();
    wallpaperList = new ArrayList<>();
    recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new WallpapersAdapter(this, wallpaperList);

    recyclerView.setAdapter(adapter);

    progressBar = findViewById(R.id.progressbar);



    dbWallpapers = FirebaseDatabase.getInstance().getReference("images")
            .child(category);



    if(FirebaseAuth.getInstance().getCurrentUser() != null){
        dbFavs = FirebaseDatabase.getInstance().getReference("users")
                .child( FirebaseAuth.getInstance().getCurrentUser().getUid() )
                .child( "favourites" )
                .child( category );

        fetchFavWallpapers( category );
    }else {
        fetchWallpapers( category );
    }
}

壁紙適配器

public class WallpapersAdapter extends RecyclerView.Adapter<WallpapersAdapter.WallpaperViewHolder> {

private Context mCtx;
private List<Wallpaper> wallpaperList;
DatabaseReference dbWallpapers;


public WallpapersAdapter(Context mCtx, List<Wallpaper> wallpaperList) {
    this.mCtx = mCtx;
    this.wallpaperList = wallpaperList;


}

@Override
public WallpaperViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(mCtx).inflate( R.layout.recyclerview_wallpapers, parent, false);
    return new WallpaperViewHolder(view);

}

@Override
public void onBindViewHolder(WallpaperViewHolder holder, int position) {
    Wallpaper w = wallpaperList.get(position);
    holder.textView.setText(w.title);
    Glide.with(mCtx)
            .load(w.url)
            .into(holder.imageView);

    if (w.isFavourite) {
        holder.checkBoxFav.setChecked(true);
    }
}

@Override
public int getItemCount() {
    return wallpaperList.size();
}


class WallpaperViewHolder extends RecyclerView.ViewHolder
        implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {

    TextView textView;
    ImageView imageView;
}

分類適配器

public class CategoriesAdapter extends RecyclerView.Adapter<CategoriesAdapter.CategoryViewHolder> {

private Context mCtx;
private List<Category> categoryList;

public CategoriesAdapter(Context mCtx, List<Category> categoryList) {
    this.mCtx = mCtx;
    this.categoryList = categoryList;
}

@Override
public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_categories, parent, false);
    return new CategoryViewHolder(view);
}

@Override
public void onBindViewHolder(CategoryViewHolder holder, int position) {
    Category c = categoryList.get(position);
    holder.textView.setText(c.name);
    Glide.with(mCtx)
            .load(c.thumb)
            .into(holder.imageView);
}

@Override
public int getItemCount() {
    return categoryList.size();
}

class CategoryViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView textView;
    ImageView imageView;

    public CategoryViewHolder(View itemView) {
        super(itemView);

        textView = itemView.findViewById(R.id.text_view_cat_name);
        imageView = itemView.findViewById(R.id.image_view);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int p = getAdapterPosition();
        Category c = categoryList.get(p);

        Intent intent = new Intent(mCtx, WallpapersActivity.class);
        intent.putExtra("category", c.name);

        mCtx.startActivity(intent);
    }
}

Firebase 數據庫

Apps RecyclerView

您可以在檢索子值時使用時間戳,並且可以在頂部顯示具有最新時間戳的時間戳

ref.child("myData").orderByChild("timestamp").limitToLast(10)

然后在您的安全和規則中有類似的內容:

"myData": {
        ".indexOn": "timestamp"
      }

為了提高性能

在您的壁紙活動中設置適配器之前添加此行:

                Collections.reverse( wallpaperList);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM