2016-04-07 6 views
6

Ich habe Probleme, wo Youtube-Video nicht angezeigt wird nur die letzte wird gespielt und das auch, wenn ich das Video scrollen verschwindet. Was ich wollte, ist jedes Video sollte angezeigt werden und jedes Video ist anders.Youtube Video wird nicht in RecyclerView angezeigt

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

haben Sie bitte Entschlossenheit bekommen? Ich bin auch mit demselben Problem konfrontiert, bitte hilf mir. – user1629977

+0

Ist das gewünschte Verhalten, dass das Video an Ort und Stelle spielt, oder dass es einen separaten Player startet ([Beispiel] (https://youtu.be/83tXbg8qfOs?t=25s))? Könnten Sie bitte auch Ihre Layoutdatei posten? – PPartisan

+0

@PPartisan Ich versuche, eine Liste von YouTube Videos anzuzeigen. wenn der Nutzer auf ein Video klickt. Es öffnet keinen Dialog oder andere Aktivitäten. Es wird in Listview oder Recycler planen, wo sie Tag sind. – user1629977

Antwort

0

Wenn ich recht verstehe, werden die Elemente in Ihrem RecyclerView nicht korrekt/vollständig angezeigt? Einige Screenshots und deine XML-Datei wären hilfreich.

Wenn dies tatsächlich das Problem ist, überprüfen Sie die playerview_demo.xml wenn es layout_height zu wrap_content

gesetzt, wenn es nicht zu wrap_content gesetzt war dies das Problem war. Wenn nicht, lass es uns wissen.

+1

Nein, es gibt kein Problem in XML. Ich teile das Bild wie es aussieht. http://postimg.org/image/iwvkzeuab/ – Ravi

+0

@Ravi haben Sie bitte Entschlossenheit bekommen? Ich bin auch mit demselben Problem konfrontiert, bitte hilf mir. – user1629977

+0

Sorry @ user1629977, ich verwende diesen Code nicht, sondern verwende Webview und spiele Youtube-Videos. – Ravi

0

Sie können das nicht tun, da die Ansicht YoutubePlayer zu groß ist, um zu einem Recyclerview hinzugefügt zu werden. Verwenden Sie stattdessen eine YouTubeThumbnailView, um die Miniaturansichten anzuzeigen. Wenn der Benutzer auf eine davon klickt, können Sie eine YouTubePlayerFragment oder eine Aktivität mit einer YouTubeplayerView Ansicht starten.

In Ihrem Fall diese ähnliche dies für den Hinweis auf

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); 
} 
} 

bearbeiten Dank Irfan Raza wäre. Siehe this Antwort, es scheint, als ob es getan werden kann

+0

Es kann zur Laufzeit gemacht werden. Siehe diese Antwort https://stackoverflow.com/questions/33558818/youtubeplayerfragment-inside-reyclerview –