2017-08-12 69 views
0

我知道这些问题以前被很多人问过,但是对于我的需求,我无法获得解决方案。 我已经创建了主要类,我实现了获取视频名称列表并将其放入回收视图中的方法。所以当用户点击任何特定的视频名称获取URL。所以问题是我如何实现逻辑来播放点击的项目。 MainActivity:在android studio中播放mp4 url​​从服务器获取的代码

public class MainActivity extends AppCompatActivity { 

//ProgressDialog mDialog; 
VideoView videoView; 
Button btnPlayPause; 
//ImageButton btnPlayPause; 
String videoURL; 

ProgressDialog pd; 
private final String url_video = "url://xyz.com/abc/video"; 
private static final int RECOVERY_REQUEST = 1; 

private RecyclerView recyclerView; 
private VideoListAdapter videoListAdapter; 
private ArrayList<VideoDetail> videoDetailsArrayList = new ArrayList<>(); 

private View.OnClickListener videoItemClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     videoURL = view.getTag().toString(); 

     //setVideo(); 

    } 
}; 



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

    btnPlayPause= (Button) findViewById(R.id.btn_play_pause); 
    videoView = (VideoView) findViewById(R.id.videoView1); 

    setAdapter(); 

    loadRequestList(); 
} 



private void loadRequestList() { 

    if (isNetworkAvailable()) { 

     pd = new ProgressDialog(MainActivity.this); 
     pd.setMessage("Loading data..."); 
     pd.show(); 

     //ProgressUtils.getInstance(this).show("Loding Video List........"); 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, url_video, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 

       try { 
        //ProgressUtils.getInstance(MainActivity.this).cancel(); 
        pd.dismiss(); 

        if (TextUtils.isEmpty(response)) { 
         return; 
        } 
        VideoDetailsModel videoDetailsModel = VideoResponseHandler.getVideoListDetails(response); 
        // System.out.println("printing Data of video"+videoDetailsModel.getDetails()); 
        if (videoDetailsModel == null) { 

         return; 
        } 

        if (videoDetailsModel.getDetails() == null) { 

         return; 
        } 
        //System.out.println("printing list3\n"); 

        videoListAdapter.setVideoList((ArrayList<VideoDetail>) videoDetailsModel.getDetails()); 
        //System.out.println("printing list video\n"); 

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


      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

       pd.dismiss(); 

       //ProgressUtils.getInstance(MainActivity.this).cancel(); 
       Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG); 


      } 
     }); 

     RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); 
     requestQueue.add(stringRequest); 
    }else{ 

     builderDialog(MainActivity.this).show(); 

    } 
} 
private AlertDialog.Builder builderDialog(MainActivity listVideoActivity) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(listVideoActivity); 
    builder.setTitle("No Internet Connection"); 
    builder.setMessage("You Need To Have Mobile Data or Wifi to access this. Press OK to Exit"); 

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 

      startActivity(new Intent(MainActivity.this,MainActivity.class)); 

      //finish(); 
     } 
    }); 

    return builder; 

} 

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activityNetworkInfo = connectivityManager.getActiveNetworkInfo(); 

    return activityNetworkInfo != null && activityNetworkInfo.isConnected(); 
} 

private void setAdapter() { 

    recyclerView = (RecyclerView) findViewById(R.id.recyclerVideo); 
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); 
    videoListAdapter = new VideoListAdapter(videoDetailsArrayList,videoItemClickListener); 

    recyclerView.setLayoutManager(mLayoutManager); 
    recyclerView.setAdapter(videoListAdapter); 



} 

} 适配器类是这样的:

public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.MyViewHandler> { 

private ArrayList<VideoDetail> videoDetailArrayList = new ArrayList<>(); 
private View.OnClickListener videoItemClickListener; 


public VideoListAdapter(ArrayList<VideoDetail> videoDetailArrayList, View.OnClickListener videoItemClickListener) { 
    this.videoDetailArrayList = videoDetailArrayList; 
    this.videoItemClickListener = videoItemClickListener; 


} 

@Override 
public MyViewHandler onCreateViewHolder (ViewGroup parent, int viewType){ 


    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_video_list, parent, false); 


    return new MyViewHandler(view); 
} 

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

    if (videoDetailArrayList == null) { 
     return; 
    } 
    VideoDetail videoDetail = videoDetailArrayList.get(position); 

    if (videoDetail == null) { 
     return; 
    } 

    if (holder instance_of MyViewHandler) { 

     if (TextUtils.isEmpty(videoDetail.getFileName())) { 
      return; 
     } 

     holder.tvVideo.setText(videoDetail.getFileName()); 
     holder.tvVideo.setTag(videoDetail.getFilePath()); 
     holder.videoImage.setTag(videoDetail.getFilePath()); 
     if (videoItemClickListener != null) { 
      holder.tvVideo.setOnClickListener(videoItemClickListener); 
      holder.videoImage.setOnClickListener(videoItemClickListener); 
     } 
    } 

} 


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

public class MyViewHandler extends RecyclerView.ViewHolder { 

    private final TextView tvVideo; 
    private final ImageView videoImage; 


    public MyViewHandler(View itemView) { 
     super(itemView); 

     tvVideo = (TextView) itemView.findViewById(R.id.tvVideo); 
     videoImage = (ImageView) itemView.findViewById(R.id.videoImage); 

    } 
} 


public void setVideoList(ArrayList<VideoDetail> videoDetails) { 

    if (videoDetails != null) { 
     this.videoDetailArrayList = videoDetails; 
    } 

    notifyDataSetChanged(); 
} 

}

activity_main.xml中的文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:padding="16dp" 
tools:context="com.xyz.videoviewengineersdream.MainActivity"> 

<VideoView 
    android:id="@+id/videoView1" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<Button 
    android:id="@+id/btn_play_pause" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Play" 
    android:onClick="videoPlay" 
    android:clickable="true" 
    android:layout_below="@+id/videoView1" 
    android:layout_centerHorizontal="true" 
    android:background="@color/colorPrimary" 
    android:padding="10dp" 
    android:layout_marginTop="10dp" 
    android:textColor="#FFF" 
    android:textStyle="bold" 
    android:textSize="16dp"/> 





<View 
    android:layout_width="match_parent" 
    android:layout_height="10dp" 
    android:layout_below="@+id/btn_play_pause" 
    android:id="@+id/viewView"/> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerVideo" 
    android:layout_below="@+id/viewView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

回答

0

您已经创建VideDetail

private ArrayList<VideoDetail> videoDetailArrayList = new ArrayList<>() 

只是添加videourl领域的VideoDetail类,那么你可以直接得到按钮链接点击象下面这样onBindViewHolder

final VideDetail videodetail = videolist.get(position); 

     holder.yourbtn.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          String url = videdetail.getvideourl(); 
          // play video with the url you got 
         } 
       }); 
+0

实际上为视频视图中的主要活动,我在主活动class.my问题是我的问题是当我点击它应该播放的第一个项目,当我点击第二个项目应该停下来播放第二个项目,像这样我想要求。 –

+0

像这样Im获取URL holder.tvVideo.setText(videoDetail.getFileName()); holder.tvVideo.setTag(videoDetail.getFilePath()); holder.videoImage.setTag(videoDetail.getFilePath());如果(videoItemClickListener!= null){ holder.tvVideo.setOnClickListener(videoItemClickListener); holder.videoImage.setOnClickListener(videoItemClickListener); –

+0

你收到视频名称及其各自的网址排除权? –