2016-04-07 30 views
6

Tôi đang gặp vấn đề khi video youtube không hiển thị chỉ lần cuối cùng đang được phát và quá khi tôi cuộn video biến mất. Những gì tôi muốn là mỗi video sẽ được hiển thị và mỗi video là khác nhau.Youtube Video không hiển thị trong 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

vui lòng giải quyết? Tôi cũng phải đối mặt với vấn đề tương tự vui lòng giúp tôi. – user1629977

+0

Hành vi mong muốn mà video phát tại chỗ hay nó phát ra trình phát riêng biệt ([ví dụ] (https://youtu.be/83tXbg8qfOs?t=25s))? Bạn có thể đăng tập tin bố trí của bạn không? – PPartisan

+0

@PPartisan Tôi đang cố hiển thị danh sách các video trên YouTube. vì vậy nếu người dùng nhấp vào bất kỳ video nào. nó sẽ không mở hộp thoại hoặc hoạt động khác. nó sẽ có kế hoạch trong listview hoặc recycler, nơi họ là tag. – user1629977

Trả lời

0

Nếu tôi hiểu đúng, các mục trong RecyclerView của bạn không được hiển thị đúng/đầy đủ? Một số ảnh chụp màn hình và tệp xml của bạn sẽ hữu ích.

Nếu đây thực sự là vấn đề, kiểm tra của bạn playerview_demo.xml nếu nó layout_height được thiết lập để wrap_content

Nếu nó không được thiết lập để wrap_content này là vấn đề. Nếu không, hãy cho chúng tôi biết.

+1

không có vấn đề gì trong xml. tôi đang chia sẻ hình ảnh như thế nào. http://postimg.org/image/iwvkzeuab/ – Ravi

+0

@Ravi, bạn đã giải quyết chưa? Tôi cũng phải đối mặt với vấn đề tương tự vui lòng giúp tôi. – user1629977

+0

Xin lỗi @ user1629977, tôi không sử dụng mã này thay vì sử dụng Webview và phát video trên Youtube. – Ravi

0

Bạn không thể làm điều đó vì chế độ xem YoutubePlayer quá lớn để được thêm vào recyclerview. Sử dụng YouTubeThumbnailView để hiển thị hình thu nhỏ. Khi người dùng nhấp vào một trong số họ, bạn có thể bắt đầu một YouTubePlayerFragment hoặc hoạt động có chế độ xem YouTubeplayerView.

Trong trường hợp của bạn này sẽ là như thế này

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

Sửa Nhờ Irfan Raza cho trỏ này ra. Xem câu trả lời this, có vẻ như nó có thể thực hiện

+0

Nó có thể được thực hiện trong thời gian chạy. Xem câu trả lời này https://stackoverflow.com/questions/33558818/youtubeplayerfragment-inside-reyclerview –

Các vấn đề liên quan