2017-07-09 4 views
1

Ich arbeite in einem Projekt und ich möchte Favoritensymbol auf Kartenansicht setzen und ich möchte Cardview Detail zu einer anderen Aktivität zeigen. Ich benutze Firebase für das Set Cardview mit Recyclerview.favorite cardview with firebase

Ich bin Anfänger in Android. Ich möchte etwas Hilfe, um diesen Teil zu reparieren.

Wie kann ich Details von cardview erhalten, wenn ich auf das Favoritensymbol klicke und das Cardview-Detail auf eine andere Recycler-Ansicht umstelle?!?!?!?!

Code eingeben hier viewHolder.mStarBtn.setOnClickListener (neu View.OnClickListener() { @Override public void onClick (endgültige Ansicht Ansicht) {

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

      } 
     }); 
    } 

});

Ich möchte diese ganze Zeichenfolge kopieren und sie einer anderen Recycleransicht anzeigen. Jetzt setze ich diese Zeichenfolge auf eine Recyclerview mit cardview. Ich möchte nicht Schlüssel erhalten oder erhalten id.i Reihe von Titel und atring von desc und Zeichenfolge des Bildes erhalten möchten

enter code here 

KPhBVHz4cmukSY ...

desc: "کیف دست دوز"

Bild: "https://firebasestorage.google ...

Titel: "کیف دست دوز"

Antwort

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

Sie können mit jedem CardView im populateViewHolder Dinge tun. In diesem Beispiel:

1) Der Text gesetzt (setText) für vName und vMessage

2) Mit getRef (i) .getKey() können Sie den übergeordneten Schlüssel für die in der Karte angezeigten Daten erhalten.

3) Ein OnClickListener kann auch hier in einem Ding in der CardView oder in diesem Fall sogar in der CardView selbst gesetzt werden.

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); 

Drei Dinge zu beachten: 1) Sie werden jede Ansicht (Textview, Image und usw.) in der ViewHolder Klasse definieren. auch 2) aus addValueEventListener die Lieblingsimage/Image zu ändern Um Ihnen die ViewHolder als endgültig in populateViewHolder 3) Hier nur müssen erklären, ich dataSnapshot.exists verwenden, wenn() aber man konnte fordern Sie einen Wert an und ändern Sie ihn basierend darauf. Allerdings ist dataSnapshot.exists() in den meisten Fällen schneller und effizienter.

+0

Yes.i benutze populateViewholder, aber ich, was man Daten von jedem cardview seinen Lieblingsbuttom zu einer anderen Tätigkeit klickte. mDatabaseStar.addValueEventListener (neu ValueEventListener() { @Override public void OnDataChange (DataSnapshot dataSnapshot) { if (mProccessStar) { if (dataSnapshot.child (post_key1) .hashChild (mAuth1.getCurrentUser () .GetUid())) { mDatabaseStar.Child (post_key1) .child (mAuth1.getCurrentUser() .getUid()) removeValue();. mProccessStar = false; } else { mDatabaseStar.child (post_key1) .child (mAuth1.getCurrentUser(). getUid()). setValue(); ... – user5199809

+0

Ich habe meine Antwort bearbeitet lassen Sie mich wissen, wenn Sie noch Fragen haben – CacheMeOutside

+0

Ich habe diesen Teil in meinem Code. Das ist nicht mein Problem Wenn ich auf Favorit btn ich möchte src von Titel und desc und Bild von cardview bekommen und es in neue Zeichenfolge in meine Web-Datenbank und rufen Sie sie in einer anderen Aktivität. Ist diese Frage klar?!?!? – user5199809

0

einen Knoten kopieren dies zu tun:

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

     } 
    }); 

kopieren Sie es dann an den neuen Standort:

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

Der letzte Teil ist, wenn Sie das Original, wenn die Kopie passiert erfolgreich entfernen möchten.Bitte markieren Sie diese Antwort als korrekt, wenn Sie danach gesucht haben.

+0

Nein, es funktioniert nicht – user5199809

+0

Vielleicht machen Sie die HashMap hashMapContainingCopy eine private Variable – CacheMeOutside