首页 文章

与firebase最喜欢的cardview

提问于
浏览
1

我在一些项目中工作,我想将喜欢的图标设置为卡片视图,我想将cardview详细信息显示给另一个活动 . 我使用firebase for set cardview和recyclerview .

我是android的初学者 . 所以我想要一些帮助来解决这个问题 .

当我点击收藏夹图标并将cardview详细信息设置到另一个回收站视图时,如何获得cardview的详细信息?!?!?!?!

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想要获取 Headers 和字符串desc和图像串的字符串

KPhBVHz4cmukSY...

desc:“کیفدستدوز”

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

Headers :“کیفدستدوز”

3 回答

  • 0
    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) .

  • 0

    您可以在populateViewHolder中使用每个CardView执行操作 . 在这个例子中:

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

    2)使用getRef(i).getKey(),您可以获得卡中显示的数据的父键 .

    3)也可以在CardView中的东西中设置OnClickListener,或者在这种情况下甚至是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类中定义每个视图(TextView,ImageView等) . 2)为了能够在 addValueEventListener 中更改喜欢的ImageView / ImageButton,你必须在 populateViewHolder 中将ViewHolder声明为final . 3)这里我只是使用if dataSnapshot.exists() 但你也可以请求一个值并根据它来改变它 . 但是,在大多数情况下, dataSnapshot.exists() 更快更有效 .

  • 0

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

    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) {
                                        }
    

    最后一部分是如果要在复制成功的情况下删除原始文件 . 如果这是您正在寻找的,请将此答案标记为正确 .

相关问题