I have a VideoView inside a RecyclerView. In the end, I have a list of videos to play on Recyclerview. I decided to start with one video, then move on to creating several videos. It seems I can not play one video in Recyclerview. When I run the application on my phone, all I get is a progress bar. The onPrepared function is never called for some reason. Here is my code.
RecyclerActivity.java
import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.view.Menu; import android.view.MenuItem; import android.support.v7.widget.RecyclerView; public class RecyclerActivity extends ActionBarActivity { private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycler); mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); mAdapter = new MyAdapter(this); mRecyclerView.setAdapter(mAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) {
Myadapter.java
import android.app.ProgressDialog; import android.content.Context; import android.media.MediaPlayer; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.MediaController; import android.widget.TextView; import android.widget.VideoView; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context context; private ProgressDialog progressDialog; private MediaController mediaControls; public static class ViewHolder extends RecyclerView.ViewHolder{ public VideoView mVideoView; public ViewHolder(View v){ super(v); mVideoView = (VideoView) v.findViewById(R.id.video_view); } } public MyAdapter(Context mContext) { context = mContext; mediaControls = new MediaController(context); progressDialog = new ProgressDialog(context); progressDialog.setTitle("Random Video"); progressDialog.setMessage("Loading..."); progressDialog.setCancelable(false); progressDialog.show(); } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_video_view, parent,false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { try{ holder.mVideoView.setMediaController(mediaControls); holder.mVideoView.setVideoURI(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.kitkat)); } catch (Exception e){ Log.e("Error", e.getMessage()); e.printStackTrace(); } holder.mVideoView.requestFocus(); holder.mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { progressDialog.dismiss(); holder.mVideoView.start(); } }); } @Override public int getItemCount() { return 1; }
my_video_view.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" tools:context=".RecyclerActivity"> <VideoView android:id="@+id/video_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout>
activity_recycler.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".RecyclerActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
Any ideas? By the way, the video file is a .3gp file. Thanks!
source share