Можно ли использовать один видоискатель для двух типов просмотра? - PullRequest
0 голосов
/ 04 октября 2018

Я новичок в разработке для Android, я хочу создать вид рециркулятора с двумя типами представлений, один для видео, а другой для фотографии, но нужно ли для этого создать 2 виджета, разве мы не можем просто использовать один видхолдер для этого???Причина Я сталкиваюсь с большой проблемой, как мне нужно объявить эту функцию два раза для 2 видоискателя

FOR PhotoHolder

private void addNewlike(final 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(holder.photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes))
            .child(newLikeID)
            .setValue(likes);
    mReference.child(mContext.getString(R.string.dbname_user_photos))
            .child(holder.photo.getUser_id())
            .child(holder.photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes))
            .child(newLikeID)
            .setValue(likes);
    holder.heart.toggleLike();
    HashMap<String ,String> notificationData = new HashMap<>();
    notificationData.put("from",FirebaseAuth.getInstance().getCurrentUser().getUid());
    notificationData.put("type","likes");
    notificationData.put("photo_desc",holder.photo.getDescription());

    holder.mNotification.child(holder.photo.getUser_id()).setValue(notificationData).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            getLikesString(holder);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            getLikesString(holder);


        }
    });

}

FOR VideoHolder

private void addNewlike(final VideoHolder 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(holder.photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes))
            .child(newLikeID)
            .setValue(likes);
    mReference.child(mContext.getString(R.string.dbname_user_photos))
            .child(holder.photo.getUser_id())
            .child(holder.photo.getPhoto_id())
            .child(mContext.getString(R.string.field_likes))
            .child(newLikeID)
            .setValue(likes);
    holder.heart.toggleLike();
    HashMap<String ,String> notificationData = new HashMap<>();
    notificationData.put("from",FirebaseAuth.getInstance().getCurrentUser().getUid());
    notificationData.put("type","likes");
    notificationData.put("photo_desc",holder.photo.getDescription());

    holder.mNotification.child(holder.photo.getUser_id()).setValue(notificationData).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            getLikesString(holder);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            getLikesString(holder);


        }
    });

}

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Я бы предложил иметь один пользовательский ViewHolder, установить переменную в том видоискателе, для какого «типа» он используется, а затем, когда вы рисуете с использованием виджета, просто оберните настройки фотографии в if (isPhoto) {// сделать всю работу с фотографиями} else {// сделать всю работу с видео

0 голосов
/ 04 октября 2018

Почему бы вам не объявить общий класс держателя вида и расширить этот класс для photoHolder и VideoHolder?

Вам нужен общий класс:

public class MediaHolder extends RecyclerView.ViewHolder{

// common properties

}

, а затем расширить егокласс для ваших PhotoHolder и VideoHolder.

Тогда вы должны объявить свой метод следующим образом:

private void addNewlike(final MediaHolder holder)
...