2016-07-08 16 views
1

Ich versuche, ein Youtube-Video-Listview zu erstellen, es funktioniert statisch durch Angabe bestimmter URL, aber ich möchte es dynamisch mit JSON tun.Benutzerdefinierte Listenansicht mit Youtube-Video in Android

Dies ist mein Code:

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

}

Ich bin immer ein Problem an:

youTubeThumbnailLoader.setVideo((videoItems.get(position));

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

Das ist mein Adapter ist 10 und

Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity)ctx, Config.YOUTUBE_API_KEY, videoItems, 100, true, false);

Das Problem ist, dass ich nicht da bin immer ist videoItems in beiden String-Parameter benötigt, aber ich habe eine Liste.

Gibt es eine Lösung?

Antwort

0

Der korrekte Weg ist, senden Sie einen Listener wie ein Parameter in Ihrem Adapter-Konstruktor, um die Taps zu steuern.

In Ihrer Lösung können Sie das folgende bei onBindViewHolder Methode tun:

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

Ich hoffe, das hilft.

+0

videoItems.getitem (Position) funktioniert nicht –

+0

Sorry, ist nur 'videoItems.get (Position)'. Ich werde es aktualisieren. –

+0

funktioniert auch nicht –

Verwandte Themen