Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VideoView not playing video or audio in RecyclerView

Hi I am trying to create a video journal fragment that has a recyclerview which contains a title, a mood, and a video in each list item. For some reason the videoview is not even showing up. The videofilePath is saving correctly and I've checked with println statements. I'm not getting any errors, but its just completely collapsed. The next list item starts before the video displays.

Here is my ViewHolder class

public class JournalViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private TextView mood;
private VideoView mVideoView;
MediaController mMediaController;
Context mContext;

public JournalViewHolder(View view, Context context){
    super(view);
    mContext = context;
    title = (TextView)view.findViewById(R.id.JournalTitle);
    mood = (TextView)view.findViewById(R.id.JournalMood);
    mVideoView = (VideoView)view.findViewById(R.id.JournalVideo);
    mMediaController = new MediaController(context);
}

public void bind(JournalEntry journalEntry){
    title.setText(journalEntry.getTitle());
    mood.setText(journalEntry.getMood());
    if(journalEntry.getVideoFileName() != null){
        Uri uri  = Uri.parse(journalEntry.getVideoFileName());
        mVideoView.setVideoURI(uri);
        mVideoView.requestFocus();
        mVideoView.setMediaController(mMediaController);
        mVideoView.setZOrderOnTop(true);
        mVideoView.start();
    }
}

}

Here is my adapter class

public class JournalRecyclerViewAdapter extends RecyclerView.Adapter<JournalViewHolder> {

private List mJournalEntries; private Context mContext;

public JournalRecyclerViewAdapter(List<JournalEntry> entries, Context context){
    mJournalEntries = entries;
    mContext = context;
}

@Override
public JournalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.journal_list_items, parent, false);
    JournalViewHolder holder = new JournalViewHolder(view, mContext);

    return holder;
}

@Override
public void onBindViewHolder(JournalViewHolder holder, int position) {
    JournalEntry entry = mJournalEntries.get(position);
    holder.bind(entry);
}

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

}

Here is my class that initiates the list of items and the recyclerview

public class JournalView extends FragmentLoggingLifeCycler {
private RecyclerView mRecyclerView;
DataAccess mDataAccess;
List<JournalEntry> mEntryList;
public static final String USERNAME_KEY = "username";
public static final String PASSWORD_KEY = "password";
String password;
String username;
User currentUser;
private Context mContext;

public JournalView() {
    // Required empty public constructor
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mContext = activity.getApplicationContext();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    mContext = context;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_journal_view, container, false);
    Bundle data = getArguments();
    username = data.getString(USERNAME_KEY);
    password = data.getString(PASSWORD_KEY);
    LinearLayoutManager manager = new LinearLayoutManager(getActivity());
    mDataAccess = DataAccess.getDataAccess(container.getContext());
    currentUser = mDataAccess.getLoginUser(username, password);


     mEntryList = mDataAccess.getAllJournals();
        //mDataAccess.mDatabase.delete(Scheme.Journal.NAME, null, null);
//        mEntryList = trimList(mEntryList, currentUser.getUsername());
//        for(int counter = 0; counter < mEntryList.size(); counter++){
//            System.out.println(mEntryList.get(counter).getTitle());
//        }
        mRecyclerView = (RecyclerView)view.findViewById(R.id.JournalList);
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setAdapter(new JournalRecyclerViewAdapter(mEntryList, mContext));
        return view;
    }

private static List<JournalEntry> trimList(List<JournalEntry> entries, String username){
    List<JournalEntry> returnedList = new ArrayList<>();

    for(int i = 0; i< returnedList.size(); i++){
        System.out.println(entries.get(i).getUsername()+ ", " +username);
        if(entries.get(i).getUsername().equals(username)){
            returnedList.add(entries.get(i));
        }
    }
    return returnedList;
}

}

and now here are my XML files.

<android.support.v7.widget.RecyclerView
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:layout_weight="1"
android:id="@+id/JournalList">

List Item files

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:layout_weight="2">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:text="@string/Title"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/JournalTitle"/>
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="2"
    android:orientation="horizontal">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:text="@string/Mood"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/JournalMood"/>

</LinearLayout>
<VideoView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:id="@+id/JournalVideo"
    android:visibility="visible"/>

like image 485
iro2596 Avatar asked Dec 11 '15 19:12

iro2596


1 Answers

Check out this Sample Code for how to have videos playing inside RecyclerView VideoInRecyclerViewExamples

like image 93
atabouraya Avatar answered Oct 20 '22 15:10

atabouraya