Вы можете создать интерфейс, который будут реализованы обоими вашими владельцами, и иметь одну функцию, которая принимает этот интерфейс в качестве аргумента.
Например:
public interface MyInterface {
Photo getPhoto(); // I assume your holder.photo returns a photo class here but feel free to replace by whatever is correct
Heart getHeart();
}
, тогда вы держатели:
public PhotoHolder implements MyInterface { // keep extension if you have one
Photo photo;
Heart heart;
// all your previous methods
// implement the interface
@Override
public Photo getPhoto() { return photo; }
@Override
public Heart getHeart() { return heart; }
}
и, наконец, ваша функция:
private void addNewlike(final MyInterface 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.getPhoto().getPhoto_id())
.child(mContext.getString(R.string.field_likes))
.child(newLikeID)
.setValue(likes);
mReference.child(mContext.getString(R.string.dbname_user_photos))
.child(holder.getPhoto().getUser_id())
.child(holder.getPhoto().getPhoto_id())
.child(mContext.getString(R.string.field_likes))
.child(newLikeID)
.setValue(likes);
holder.getPhoto().toggleLike();
}
и она должна работать как положено