使用 Firebase 最喜欢的卡片视图

favorite cardview with firebase

我在某个项目中工作,我想将最喜欢的图标设置为卡片视图,我想向另一个 activity 显示卡片视图的详细信息。我使用 firebase 设置 cardview 和 recyclerview 。

我是 android 的初学者。所以我需要一些帮助来修复这部分。

当我点击最喜欢的图标并将卡片视图详细信息设置为另一个回收站视图时,如何获取卡片视图的详细信息?!?!?!?!

viewHolder.mStarBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        mProccessStar = true;
        mDatabaseStar.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (mProccessStar) {
                    if (dataSnapshot.child(post_key1).hasChild(mAuth1.getCurrentUser().getUid())) {
                        mDatabaseStar.child(post_key1).child(mAuth1.getCurrentUser().getUid()).removeValue();
                        mProccessStar = false;
                    } else {
                        mDatabaseStar.child(post_key1).child(mAuth1.getCurrentUser().getUid()).setValue(post_key1);
                        mProccessStar = false;
                    }
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
});

我想复制所有这些字符串并将其显示给另一个 recyclerview,现在我将此字符串设置为带有 cardview 的 recyclerview。 我不想获取密钥或获取 id.i 想要获取标题字符串和 desc 的 atring 以及图像的字符串

KPhBVHz4cmukSY...

描述: "کی́ دست دوò"

图片: “https://firebasestorage.google...

标题:“ک̶́ دست دوò”

您可以对 populateViewHolder 中的每个 CardView 执行操作。在这个例子中:

1) 为 vName 和 vMessage 设置文本 (setText)

2) 使用 getRef(i).getKey() 可以获得卡片中显示的数据的 parent 键。

3) OnClickListener 也可以在这里设置在 CardView 中的东西上,或者在这种情况下甚至是 CardView 本身。

mRecyclerAdapter =
            new FirebaseRecyclerAdapter<DataModel, ViewHolder>(
                    DataModel.class,
                    R.layout.item_list,
                    ViewHolder.class,
                    mDatabaseRef
            ) {
                @Override
                protected void populateViewHolder(final ViewHolder viewHolder, final DataModel student, int i) {
                    viewHolder.vName.setText(student.getName());
                    viewHolder.vMessage.setText(student.getMessage());

                    String itemId = getRef(i).getKey();


                    viewHolder.vCard.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(final View v) {
                            aMethodThatDoesSomething();

                        }
                    });
                    DatabaseReference mFavourite= mRef.child("shortlisted_tutors").child(currentUID1).child(otherUserUID);
                        mFavourite.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot){
                                if (dataSnapshot.exists()) {
                                    viewHolder.favoriteImageButton.setImageResource(R.mipmap.ic_bookmarkchecked);

                                }
                                else {
              viewHolder.favoriteImageButton.setImageResource(R.mipmap.ic_shortlistbookmark);

                                }
                            }

                    }
                };

        mRecyclerView.setAdapter(mRecyclerAdapter);
        mRecyclerView.setLayoutManager(manager);

三点注意事项: 1) 您必须在 ViewHolder Class 中定义每个视图(TextView、ImageView 等)。 2) 为了能够从 addValueEventListener 中更改收藏夹 ImageView/ImageButton,您必须在 populateViewHolder 中将 ViewHolder 声明为最终的 3) 在这里我只使用 if dataSnapshot.exists() 但你也可以请求一个值并根据它更改它。然而,dataSnapshot.exists() 在大多数情况下更快更有效。

要复制节点,请执行以下操作:

    mRefToCopy = mRef.child("original_data");
    HashMap<String, Object> hashMapContainingCopy = new HashMaTp<>();
    mSubmittedTutorFeedback.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            hashMapContainingCopy = (HashMap<String, Object>) dataSnapshot.getValue();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

然后复制到新位置:

 mNewLocation.setValue(hashMapContainingCopy, new DatabaseReference.CompletionListener() {
                        @Override
                        public void onComplete(DatabaseError databaseError, DatabaseReference reference) {
                            if (databaseError != null) {
                                Log.e("tutor feedback write", "Failed to write message", databaseError.toException());
                            }
                            else {
                                mRefToCopy.removeValue(new DatabaseReference.CompletionListener() {
                                    @Override
                                    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                    }

最后一部分是复制成功后是否要删除原件。如果这是您要查找的内容,请将此答案标记为正确。

DatabaseReference newPost = mDatabaseStar.push();
                                newPost.child("title").setValue(model.getTitle());
                                newPost.child("desc").setValue(model.getDesc());

mDatabaseStar.child(post_key1).child(mAuth1.getCurrentUser().getUid()).setValue(newPost);