2016-04-07 15 views
6

Sono di fronte a un problema in cui il video di YouTube non viene visualizzato solo l'ultimo viene riprodotto e anche quando scorro il video scompare. Quello che volevo è che ogni video dovrebbe essere visualizzato e ogni video è diverso.Il video di Youtube non viene visualizzato in RecyclerView

public class MyRecyclerViewAdapter extends Adapter<MyRecyclerViewAdapter 
.DataObjectHolder> { 
private static String LOG_TAG = "MyRecyclerViewAdapter"; 
private ArrayList<DataObject> mDataset; 
private static MyClickListener myClickListener; 
private static final int RECOVERY_DIALOG_REQUEST = 10; 
public static String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
Context ctx; 
View view; 

public static class DataObjectHolder extends ViewHolder 
    implements View 
    .OnClickListener { 
    YouTubePlayerView youTubeView; 
public DataObjectHolder(View itemView) { 
    super(itemView); 
    youTubeView = (YouTubePlayerView) itemView.findViewById(R.id.youtube_view); 
    Log.i(LOG_TAG, "Adding Listener"); 
    itemView.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    myClickListener.onItemClick(getAdapterPosition(), v); 
} 
} 

public void setOnItemClickListener(MyClickListener myClickListener) { 
this.myClickListener = myClickListener; 
} 

public MyRecyclerViewAdapter(Context context,ArrayList<DataObject> myDataset) { 
    mDataset = myDataset; 
    ctx=context; 
} 

@Override 
public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
    view = LayoutInflater.from(parent.getContext()) 
     .inflate(R.layout.playerview_demo, parent, false); 

DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
return dataObjectHolder; 
} 



@Override 
public void onBindViewHolder(DataObjectHolder holder, final int position) { 
holder.youTubeView.initialize(key, new YouTubePlayer.OnInitializedListener() { 
    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) { 
     player.cueVideo(mDataset.get(position).getmText1()); 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { 
     if (errorReason.isUserRecoverableError()) { 
      errorReason.getErrorDialog((Activity) ctx, RECOVERY_DIALOG_REQUEST).show(); 
     } else { 
      String errorMessage = String.format("YouTube Error (%1$s)", 
        errorReason.toString()); 
      Toast.makeText(ctx, errorMessage, Toast.LENGTH_LONG).show(); 
     } 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == RECOVERY_DIALOG_REQUEST) { 
      // Retry initialization if user performed a recovery action 
      getYouTubePlayerProvider().initialize(key, this); 
     } 
    } 

    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
     Toast.makeText(ctx, view.toString(), Toast.LENGTH_LONG).show(); 
     return (YouTubePlayerView) view.findViewById(R.id.youtube_view); 
    } 


}); 
} 

public void addItem(DataObject dataObj, int index) { 
mDataset.add(index, dataObj); 
notifyItemInserted(index); 
} 

public void deleteItem(int index) { 
mDataset.remove(index); 
notifyItemRemoved(index); 
} 

@Override 
public int getItemCount() { 
return mDataset.size(); 
} 

public interface MyClickListener { 
public void onItemClick(int position, View v); 
} 
} 
+0

per favore hai ottenuto la risoluzione? Sto anche affrontando lo stesso problema gentilmente aiutami. – user1629977

+0

È il comportamento desiderato in cui il video viene riprodotto o che avvia un lettore separato ([esempio] (https://youtu.be/83tXbg8qfOs?t=25s))? Sareste in grado di pubblicare anche il file di layout per favore? – PPartisan

+0

@Partartisan Sto cercando di visualizzare un elenco di video YouTube. quindi se l'utente farà clic su qualsiasi video. non aprirà la finestra di dialogo o altre attività. pianificherà in listview o recycler dove sono tag. – user1629977

risposta

0

Se ho capito bene, gli articoli nel tuo RecyclerView non vengono visualizzati correttamente/completamente? Alcuni screenshot e il tuo file xml sarebbero utili.

Se questo è davvero il problema, controllare il playerview_demo.xml se è layout_height è impostato su wrap_content

Se non è stato impostato per wrap_content questo era il problema. In caso contrario, faccelo sapere.

+1

no non c'è nessun problema in xml. sto condividendo l'immagine come sembra. http://postimg.org/image/iwvkzeuab/ – Ravi

+0

@Ravi per favore hai ottenuto la risoluzione? Sto anche affrontando lo stesso problema gentilmente aiutami. – user1629977

+0

Mi dispiace @ user1629977, non sto usando questo codice usando invece Webview e riproducendo video di Youtube. – Ravi

0

Non è possibile farlo poiché la vista YoutubePlayer è troppo grande per essere aggiunta a una panoramica di riciclaggio. Utilizzare invece YouTubeThumbnailView per visualizzare le miniature. Quando l'utente fa clic su uno di essi, è possibile avviare un YouTubePlayerFragment o un'attività con una vista YouTubeplayerView.

Nel tuo caso questo sarebbe stato così

public class MyRecyclerViewAdapter extends Adapter<MyRecyclerViewAdapter 
.DataObjectHolder> { 
private static String LOG_TAG = "MyRecyclerViewAdapter"; 
private ArrayList<DataObject> mDataset; 
private static MyClickListener myClickListener; 
private static final int RECOVERY_DIALOG_REQUEST = 10; 
public static String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
Context ctx; 
View view; 

public static class DataObjectHolder extends ViewHolder 
    implements View 
    .OnClickListener { 
    YouTubeThumbnailView youTubeThumbnailView ; 
public DataObjectHolder(View itemView) { 
    super(itemView); 
    youTubeThumbnailView = (YouTubeThumbnailView) itemView.findViewById(R.id.yourId); 
    itemView.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    myClickListener.onItemClick(getAdapterPosition(), v); 
} 
} 

public void setOnItemClickListener(MyClickListener myClickListener) { 
this.myClickListener = myClickListener; 
} 

public MyRecyclerViewAdapter(Context context,ArrayList<DataObject> myDataset) { 
    mDataset = myDataset; 
    ctx=context; 
} 

@Override 
public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
    view = LayoutInflater.from(parent.getContext()) 
     .inflate(R.layout.playerview_demo, parent, false); 

DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
return dataObjectHolder; 
} 



@Override 
public void onBindViewHolder(DataObjectHolder holder, final int position) { 

holder.youTubeThumbnailView.initialize(key, new YouTubePlayer.OnInitializedListener() { 
    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) { 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { 
     if (errorReason.isUserRecoverableError()) { 
      errorReason.getErrorDialog((Activity) ctx, RECOVERY_DIALOG_REQUEST).show(); 
     } else { 
      String errorMessage = String.format("YouTube Error (%1$s)", 
        errorReason.toString()); 
      Toast.makeText(ctx, errorMessage, Toast.LENGTH_LONG).show(); 
     } 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == RECOVERY_DIALOG_REQUEST) { 
      // Retry initialization if user performed a recovery action 
      getYouTubePlayerProvider().initialize(key, this); 
     } 
    } 

    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
     Toast.makeText(ctx, view.toString(), Toast.LENGTH_LONG).show(); 
     return (YouTubePlayerView) view.findViewById(R.id.youtube_view); 
    } 


}); 
} 

public void addItem(DataObject dataObj, int index) { 
mDataset.add(index, dataObj); 
notifyItemInserted(index); 
} 

public void deleteItem(int index) { 
mDataset.remove(index); 
notifyItemRemoved(index); 
} 

@Override 
public int getItemCount() { 
return mDataset.size(); 
} 

public interface MyClickListener { 
public void onItemClick(int position, View v); 
} 
} 

Modifica Grazie a Irfan Raza per aver sollevato la questione. Vedi la risposta this, sembra come se fosse possibile

+0

Può essere eseguito in fase di esecuzione. Vedi questa risposta https://stackoverflow.com/questions/33558818/youtubeplayerfragment-inside-reyclerview –