如何在没有FirebaseRecyclerAdapter的情况下,增加Firebase中每个位置的viewCounts?[重复]

问题描述 投票:0回答:1

当我在RecyclerView中点击一个项目时,我试图获得每个位置的唯一键。

当我打开 "详细活动 "时,计数应该增加一个。我如何才能做到这一点?

所有RecyclerView的数据都是从FirebaseDB加载的。这里是屏幕截图。image description here

我们可以看到在News节点中,有一些Unique Keys。

当我点击Adapter中的某个位置时,如何在Toast中获取这些键。

这是我所尝试的。

     databaseReference = FirebaseDatabase.getInstance().getReference("News");


            databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

keyID = dataSnapshot.getKey();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

            holder.view_counter.setText(homeModel.getViewCounts());

            holder.cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                    Toast.makeText(context, "Key is " + keyID, Toast.LENGTH_SHORT).show();

    //                Intent intent = new Intent(context, DetailNews.class);
    //                intent.putExtra("POS", holder.getAdapterPosition());
    //                context.startActivity(intent);
                }
            });
        }
java android firebase-realtime-database recycler-adapter
1个回答
0
投票

按照以下步骤操作。

  1. 在你的homeModel类中添加一个字符串 "key "字段。
  2. 在这个 "key "字段中填入MainActivity中recallerview-arraylist的监听器中的firebase键值。像这样。

        ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            newsArrayList.clear();
            for(DataSnapshot data : dataSnapshot.getChildren()){
                HomeModel news = data.getValue(HomeModel.class);
                news.setKey(data.getKey());
                newsArrayList.add(news);
            }
            customAdapter.notifyDataSetChanged();
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
    
        }
    });    
    

    要在firebase中把viewCount值加1, 在你的cardView -onClick方法中写一个事务:

                String newsKey = newsArrayList.get(position).getKey();
                ref = db.getReference("News").child(newsKey);
    
                ref.runTransaction(new Transaction.Handler() {
                    @NonNull
                    @Override
                    public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                        HomeModel selectedNews= mutableData.getValue(HomeModel.class);
    
                        int p = selectedNews.getViewCount();
                        p++;
                        selectedNews.setViewCount(p);
    
                        mutableData.setValue(selectedNews);
                        return Transaction.success(mutableData);
                    }
    
                    @Override
                    public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
    
                    }
                });    
    
© www.soinside.com 2019 - 2024. All rights reserved.