J'ai développé une application dans laquelle il y a deux messages
J'ai mis en œuvre à la fois en utilisant recyclerview strong> et Firebase recycleradapter strong> mais le problème est que je ne sais pas comment différencier les deux vues, si j'utilise la vidéo Afficher utiliser fichier de classe pour les postes d'images et de vidéos: strong> p> Support: P> public static class postViewHolder extends RecyclerViewPager.ViewHolder{
View mView;
public postViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setYoutube(final String youtube){
final YouTubePlayerView youPlay = (YouTubePlayerView) mView.findViewById(R.id.youtuber);
youPlay.initialize("SOME KEY",
new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider,
YouTubePlayer youTubePlayer, boolean b) {
youTubePlayer.cueVideo(youtube);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
YouTubeInitializationResult youTubeInitializationResult) {
}
});
}
public void setimage(final Context ctx, final String image){
final ImageView post_image = (ImageView)mView.findViewById(R.id.post_image);
Picasso.with(ctx).load(image)
.networkPolicy(NetworkPolicy.OFFLINE).into(post_image, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
Picasso.with(ctx).load(image).into(post_image);
}
});
}
}
3 Réponses :
Utiliser simplement ViewType >
va résoudre ce problème pour vous.
Tout d'abord alors vous basculez entre le type de chaque enfant supposent Image Carry Type Le code doit être ressemblant à: - p> OnCreatView doit être ressemblant à: - p> FirebaserecyClerAdapter Code> devrait inclure
recyclerview.viewholder.class code> au lieu de
PostViewholder.class code> p>
1 CODE> ET TYPE DE CORPS DE VIDEO
2 CODE> Et vous atteignez cela dans
ONCreateViewholder code> entre vous gérer que dans
getItemViewTtype code>
@Override
public int getItemViewType(int position) {
post model = getItem(position);
switch (model.getType()) {
case 1:
return model1;
case 2:
return model2;
}
return super.getItemViewType(position);
}
Où allais-je utiliser load.image et youplay.cuevideo ()?
@Rohitb Toutes les modifications doivent être dans PopulateVolderholder CODE> Case 1 Vous gérez la vue de l'image et du boîtier 2 que vous traitez de la vue pour la vidéo.
Vous avez fait quelques erreurs dans ce code - par exemple Model1 et Model2 ne sont pas définies. Les classes de visualiseur vous utilisez pas non plus. Au fait, il n'y a aucune raison qu'il ne peut pas utiliser un titulaire de la vue personnalisé (porteur d'après-vente) comme vous le souhaitez.
Vous pouvez choisir le type de vision à afficher avec les adaptateurs getItemViewTtype code> méthode. Intérieur
FirebaserecyClerAdapter Code> Ajoutez les éléments suivants:
@Override
protected void populateViewHolder(PostViewHolder viewHolder, post model, int position) {
viewHolder.bind(model.isYoutube()? model.getYoutube() : model.getImage());
}
Ce qui devrait être défini dans "si (modèle.isyoutube ()) {// note: vous devrez définir cette méthode revenir type_youtube;"
Et dois-je ajouter un getter et un setter dans post.class pour ce "modèle de message = getItem (position);"
La méthode isyoutube code> est ce dont vous avez besoin pour définir.
getItem code> est une méthode de l'adaptateur. Vous devriez étudier le Recyclerview Bases de base
Préseniers de la vue avec deux vues
Essayez ceci ceci.SetisRecyClable (FALSE); B> Dans votre constructeur PostView propriétaire (vue)
RecycleView ne trouve pas la vue à chaque fois sa vue de la vue une seule fois, alors essayez d'utiliser ListView pour cela.