2016-04-07 2 views
6

Я столкнулся с проблемой, когда видео youtube не отображается, только последний воспроизводится, и это тоже при прокрутке видео пропадает. Я хочу, чтобы каждое видео было отображено, и каждое видео отличается.Youtube Video не отображается в 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

пожалуйста, вы получили решение? Я также сталкиваюсь с тем же вопросом, любезно помогаю мне. – user1629977

+0

Является желаемым поведением, которое воспроизводит видео, или что он запускает отдельный проигрыватель ([пример] (https://youtu.be/83tXbg8qfOs?t=25s))? Можете ли вы также опубликовать свой файл макета? – PPartisan

+0

@PPartisan Я пытаюсь отобразить список видео youTube. поэтому, если пользователь нажмет на любое видео. он не откроет диалог или другую активность. он будет планировать в listview или recycler, где они являются тегами. – user1629977

ответ

0

Если я понимаю правильно, то элементы в вашем RecyclerView не отображаются должным образом/полностью? Некоторые скриншоты и ваш xml-файл будут полезны.

Если это действительно проблема, проверьте ваш playerview_demo.xml, если это layout_height установлен в wrap_content

Если он не был установлен в wrap_content это был вопрос. Если нет, сообщите нам об этом.

+1

Нет проблем в xml. Я использую изображение, как оно выглядит. http://postimg.org/image/iwvkzeuab/ – Ravi

+0

@ Ravi, пожалуйста, вы получили решение? Я также сталкиваюсь с тем же вопросом, любезно помогаю мне. – user1629977

+0

Извините @ user1629977, я не использую этот код вместо использования Webview и воспроизведения видео Youtube. – Ravi

0

Вы не можете сделать это, поскольку вид слишком большой, чтобы его можно было добавить в recyclerview. Вместо этого используйте YouTubeThumbnailView для отображения эскизов. Когда пользователь нажимает на один из них, вы можете запустить YouTubePlayerFragment или деятельность с видом YouTubeplayerView.

В вашем случае это будет так

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

Редактировать Благодаря Ирфан Раза за указание на это. См. this ответ, кажется, что он может это сделать

+0

Это можно сделать во время выполнения. См. Этот ответ https://stackoverflow.com/questions/33558818/youtubeplayerfragment-inside-reyclerview –