android - 在Android中使用YouTube视频自定义ListView

标签 android youtube

我正在尝试创建一个Youtube视频Listview,它通过提供特定的URL来静态工作,但是我想使用JSON动态地进行操作。

这是我的代码:

public class ActivityVideos extends DrawerActivity{

private static final String TAG = ActivityVideos.class.getSimpleName();
private static final String url = Util.VIDEO_URL;
private ProgressDialog pDialog;
private List<VideoModel> videoList = new ArrayList<VideoModel>();
//private ListView listView;
RecyclerView listView;
//private VideoAdapter adapter;
RecyclerAdapter adapter;
//private String bitmap = "thumbnailUrl";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_videos);


    listView = (RecyclerView) findViewById(R.id.list);
    listView.setHasFixedSize(true);
    //to use RecycleView, you need a layout manager. default is LinearLayoutManager
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    listView.setLayoutManager(linearLayoutManager);
    adapter = new RecyclerAdapter(ActivityVideos.this,videoList);
    listView.setAdapter(adapter);

    pDialog = new ProgressDialog(this);
    // Showing progress dialog before making http request
    pDialog.setMessage("Loading...");
    pDialog.show();

    // Creating volley request obj
    JsonArrayRequest videoReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    hidePDialog();

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            VideoModel msg = new VideoModel();

                            msg.setVideoUrl(Util.VIDEO_URL+obj.getString("img"));

                            videoList.add(msg);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            hidePDialog();

        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(videoReq);
    //gridView.setOnItemClickListener(this);
    /*listView.setLongClickable(true);
    listView.setOnItemLongClickListener(this);*/
}

@Override
public void onDestroy() {
    super.onDestroy();
    hidePDialog();
}

private void hidePDialog() {
    if (pDialog != null) {
        pDialog.dismiss();
        pDialog = null;
    }
}

这是我的适配器:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {

//these ids are the unique id for each video
//String[] videoItems = {"P3mAtvs5Elc", "nCgQDjiotG0", "P3mAtvs5Elc"};
Context ctx;
private Activity activity;
private List<VideoModel> videoItems;

public RecyclerAdapter(Context context,List<VideoModel> videoItems)
{
    this.ctx = context;
    this.videoItems = videoItems;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_recycler_adapter, parent, false);
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_recycler_adapter, null);

    MyViewHolder viewHolder = new MyViewHolder(view);
    return viewHolder;

    //return new VideoInfoHolder(itemView);
}

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


    final YouTubeThumbnailLoader.OnThumbnailLoadedListener  onThumbnailLoadedListener = new YouTubeThumbnailLoader.OnThumbnailLoadedListener(){

        @Override
        public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) {

        }

        @Override
        public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) {
            youTubeThumbnailView.setVisibility(View.VISIBLE);
            holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.VISIBLE);
        }
    };

    holder.youTubeThumbnailView.initialize(Config.YOUTUBE_API_KEY, new YouTubeThumbnailView.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) {

            youTubeThumbnailLoader.setVideo((videoItems.get(position));
            youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener);
        }

        @Override
        public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
            //write something for failure
        }
    });
}

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

/*public class VideoInfoHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected RelativeLayout relativeLayoutOverYouTubeThumbnailView;
    YouTubeThumbnailView youTubeThumbnailView;
    protected ImageView playButton;

    public VideoInfoHolder(View itemView) {
        super(itemView);
        playButton=(ImageView)itemView.findViewById(R.id.btnYoutube_player);
        playButton.setOnClickListener(this);
        relativeLayoutOverYouTubeThumbnailView = (RelativeLayout) itemView.findViewById(R.id.relativeLayout_over_youtube_thumbnail);
        youTubeThumbnailView = (YouTubeThumbnailView) itemView.findViewById(R.id.youtube_thumbnail);
    }

    @Override
    public void onClick(View v) {

        Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) ctx, Config.YOUTUBE_API_KEY, videoItems[getLayoutPosition()],100,true,false);
        ctx.startActivity(intent);
    }
}*/

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    protected RelativeLayout relativeLayoutOverYouTubeThumbnailView;
    protected ImageView playButton;
    YouTubeThumbnailView youTubeThumbnailView;

    public MyViewHolder(View view) {
        super(view);
        playButton = (ImageView)view.findViewById(R.id.btnYoutube_player);
        playButton.setOnClickListener(this);
        relativeLayoutOverYouTubeThumbnailView = (RelativeLayout)view.findViewById(R.id.relativeLayout_over_youtube_thumbnail);
        youTubeThumbnailView = (YouTubeThumbnailView)view.findViewById(R.id.youtube_thumbnail);
    }

    @Override
    public void onClick(View v) {
        Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) ctx, Config.YOUTUBE_API_KEY, videoItems,100,true,false);

        ctx.startActivity(intent);
    }
}

}

我在以下方面遇到问题:
youTubeThumbnailLoader.setVideo((videoItems.get(position));

Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity)ctx, Config.YOUTUBE_API_KEY, videoItems, 100, true, false);
问题是,我都没有得到videoItems,那里需要String参数,但是我有一个列表。

有什么解决办法吗?

最佳答案

正确的方法是在Adapter构造函数中发送类似于参数的Listener来控制抽头。

在您的解决方案中,您可以在onBindViewHolder方法中执行以下操作:

holder.playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) ctx, Config.YOUTUBE_API_KEY, videoItems.get(position).getURL(),100,true,false);

            ctx.startActivity(intent);
        }
    });

我希望这有帮助。

关于android - 在Android中使用YouTube视频自定义ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38274853/

相关文章:

html - 如何删除 youtube iframe 中的空白区域?

android - 我应该进入 iPhone、Android 还是 Windows Mobile?

Android Eclipse 卡在启动委托(delegate)调试 session 的进度为 27%

android - 导入某些项目时出现android sdk错误

android - 使用 Android Studio 的 FCM 通知

html - Iframe 隐藏了容器的样式

javascript - 出现警报后,嵌入了Youtube视频的iframe停止了吗?

youtube - YouTube 视频,如何自动显示交互式脚本?

android - flutter :打开Facebook Messenger时出现ERR_UNKOWN_URL_SCHEME

php - 如何为PECL bbcode扩展创建[youtube] -Tag?