与firebase最喜欢的cardview

时间:2017-07-09 12:00:09

标签: android firebase firebase-realtime-database android-cardview

我在某个项目中工作,我想将喜欢的图标设置为卡片视图,我想将cardview详细信息显示给另一个活动。我使用firebase for set cardview with 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想获得标题字符串和字符串desc和图像字符串

KPhBVHz4cmukSY...

品名: “کیفدستدوز”

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

标题:“کیفدستدوز”

3 个答案:

答案 0 :(得分:0)

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

1)为vName和vMessage

设置文本(setText)

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

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类中定义每个视图(TextView,ImageView等)。 2)为了能够从 addValueEventListener 中更改喜欢的ImageView / ImageButton,您必须在 populateViewHolder 中将ViewHolder声明为final 3)这里我只使用 dataSnapshot.exists(),但您也可以请求一个值并根据它进行更改。但是, dataSnapshot.exists()在大多数情况下更快,更有效。

答案 1 :(得分: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) {
                                    }

最后一部分是如果要在副本成功发生时删除原始文件。如果这是您正在寻找的,请将此答案标记为正确。

答案 2 :(得分: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);