Jestem nowy na Androida Rozwoju ... Mam 1 recykler z widokiem 2 Vivholder 1) dla wideo 2) dla zdjęć. Wdrożył jakąś fotografię do mojego zdjęcia lub wideo ... Problem polega na tym Podobnie jak na zdjęciu podobało mi się, że jest to pokazywane na innym zdjęciu, który jest poniżej, sprawdzam w Firebase, ale pokazuje to samo, co jest dodawane na innym zdjęciu w bazie danych

Działa idealnie, gdy nie przewijam ... Myślę, że nie aktualizuje pozycji zdjęcia Jak mogę naprawić to pomóż

public class TestAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static final int VIDEO_TYPE=0;
public static final int IMAGE_TYPE=1;
private Context mContext;
private List<Photo> moviesList;
private DatabaseReference mReference;
private int mLayoutResource;
private LayoutInflater mInflater;
private Photo photo;
private VideoHolder mVideoHolder;
private PhotoHolder mPhotoHolder;

class PhotoHolder extends RecyclerView.ViewHolder {
    private SquareImageView image;
    private LikeButton mHeart,Star;
    public PhotoHolder(View view){
        super(view);
        mHeart = (LikeButton) view.findViewById(R.id.main_heart);
    }
}


class VideoHolder extends RecyclerView.ViewHolder{
    public VideoHolder(View view) {
        super(view);

    }

public TestAdapter(List<Photo> moviesList) {
    this.moviesList = moviesList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    //findViewById...
    mContext = parent.getContext();
    switch (viewType) {
        case VIDEO_TYPE:
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_type, parent, false);
            mContext = parent.getContext();
            return new VideoHolder(v);
        case IMAGE_TYPE:
            View i = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_list, parent, false);
            mContext = parent.getContext();
            return new PhotoHolder(i);

    }
    return null;
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
   // mHolder = holder;
    photo = moviesList.get(holder.getAdapterPosition());
    //  final VideoHolder viewHolder2 = (VideoHolder)holder;
    int viewType = getItemViewType(holder.getAdapterPosition());
    switch ( viewType ) {
        case IMAGE_TYPE:
            PhotoHolder photoview = (PhotoHolder) holder;
            mPhotoHolder = photoview;
            getCurrentUsername();
            final ImageLoader imageLoader =  ImageLoader.getInstance();
            imageLoader.displayImage(getItem(holder.getAdapterPosition()).getImage_path(),photoview.image);
            photoview.mHeart.setOnLikeListener(new OnLikeListener() {
                @Override
                public void liked(LikeButton likeButton) {
                    addNewPhotolike(mPhotoHolder);
                }
                @Override
                public void unLiked(LikeButton likeButton) {
                    removePhotolike(mPhotoHolder);
                }
            });
            photoview.Star.setOnLikeListener(new OnLikeListener() {
                @Override
                public void liked(LikeButton likeButton) {

                }
                @Override
                public void unLiked(LikeButton likeButton) {
                }
            });
            break;
        case VIDEO_TYPE:
            final VideoHolder viewHolder2 = (VideoHolder)holder;
            mVideoHolder = viewHolder2;            
            break;
    }


}
@Override
public int getItemCount() {
    return moviesList.size();
}
public Photo getItem(int position) {
    return moviesList.get(position);
}
@Override
public int getItemViewType ( int position ) {
    int viewType;
    if (moviesList.get(position).getType_post().contains("Photo")) {
        viewType = IMAGE_TYPE;
    } else{
        viewType = VIDEO_TYPE;
    }
    return viewType;
}

Jest to metoda dodania do zdjęcia, proszę jest, jeśli występuje problem

private void addNewPhotolike(final TestAdapter.PhotoHolder holder){
    Log.d(TAG, "addNewlike: adding new like ");
    String newLikeID = mReference.push().getKey();
    Likes likes = new Likes();
    likes.setUser_id(FirebaseAuth.getInstance().getCurrentUser().getUid());
    mReference.child(mContext.getString(R.string.dbname_photos))
            .child(photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes))
            .child(newLikeID)
            .setValue(likes);
    mReference.child(mContext.getString(R.string.dbname_user_photos))
            .child(photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes))
            .child(newLikeID)
            .setValue(likes);
    holder.mHeart.setLiked(true);

    });

}

private void removePhotolike(final TestAdapter.PhotoHolder holder){
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    reference.keepSynced(true);
    Query query = reference
            .child(mContext.getString(R.string.dbname_photos))
            .child(photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes));
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot singlesnapshot : dataSnapshot.getChildren()) {
                String keyID = singlesnapshot.getKey();
                if (holder.likeByCurrentUSer&& singlesnapshot.getValue(Likes.class).getUser_id().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) {
                    mReference.child(mContext.getString(R.string.dbname_user_photos))
                            .child(photo.getUser_id())
                            .child(photo.getPhoto_id())
                            .child(mContext.getString(R.string.field_likes))
                            .child(keyID)
                            .removeValue();
                    mReference.child(mContext.getString(R.string.dbname_photos))
                            .child(photo.getPhoto_id())
                            .child(mContext.getString(R.string.field_likes))
                            .child(keyID)
                            .removeValue();



                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });


}

}

-1
user9822291 4 czerwiec 2018, 11:27

3 odpowiedzi

Najlepsza odpowiedź

To nie jest pozycja aktualizująca ** Dodaj kolejną zmienną (Int Pozycja) Wymień zdjęcie z GetTem (Position) na polubionym słuchaczym po prostu dodaj AddnewPhotoLike (Vovedholder, Pozycja) **

private void addNewPhotolike(final TestAdapter.PhotoHolder holder, int position){
Log.d(TAG, "addNewlike: adding new like ");
String newLikeID = mReference.push().getKey();
Likes likes = new Likes();
likes.setUser_id(FirebaseAuth.getInstance().getCurrentUser().getUid());
mReference.child(mContext.getString(R.string.dbname_photos))
        .child(getItem(position).getPhoto_id())
        .child(mContext.getString(R.string.field_likes))
        .child(newLikeID)
        .setValue(likes);
mReference.child(mContext.getString(R.string.dbname_user_photos))
        .child(getItem(position).getPhoto_id())
        .child(mContext.getString(R.string.field_likes))
        .child(newLikeID)
        .setValue(likes);
holder.mHeart.setLiked(true);

});

}
0
lllllllllllllll 4 czerwiec 2018, 13:45

Recykleryczny ponowne wykorzystuje swoje rzędy. To normalne. Nie używasz wybranego przycisku lub nie. Wybierasz jeden i widoku Uchwyt utrzymuje go wybrany. Możesz dodać zmienną boolowską do obiektu obiektowego i utrzymywać status wyboru przedmiotu.

0
prsandroid 4 czerwiec 2018, 08:54

Użyj pozycji zamiast na uchwycie

0
Parth Suthar 4 czerwiec 2018, 08:55