Patr3xion
Patr3xion

Reputation: 122

How do I get a videoView to play inside a fragment?

I'm very new to fragments and I'm attempting to load a videoView into a fragment . I have my layout files laid out correctly (as I can swipe among images just fine), but I'm unsure of how to load a videoView into a fragment. My code for my activities is as follows:

package com.example.PLS;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.VideoView;

public class CustomPagerAdapter extends PagerAdapter
{
public Object instantiateItem(View collection, int position) {
    LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    int resId = 0;
    switch (position) {
        case 0: {
            resId = R.layout.page1;
            break;
        }
        case 1: {
            resId = R.layout.page2;
            break;
        }
        case 2: {
            resId = R.layout.page3;
            break;
        }
    }
    View view = inflater.inflate(resId, null);
    ((ViewPager) collection).addView(view, 0);
    return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
    return null;
}
@Override
public int getCount() {
    return 3;
}
}

package com.example.PLS;

import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.widget.VideoView;

public class MyActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Create and set adapter
    CustomPagerAdapter adapter = new CustomPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.customviewpager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(0);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}

I'm not sure where or how to place the code that tells the videoView to play a video in page1 for example. Where would I place that and how would it look?

Upvotes: 0

Views: 3448

Answers (1)

MVO
MVO

Reputation: 58

A bit offtopic: Are you sure, that you are using Fragments and not just Views? As far as I can see, you add and remove Views.

Or do you do something within the layout files? If so, could you provide the xml layout resources?

See can i use view pager with views (not with fragments)

For your question: After you call addView, you could do something like to following (or add that to a button listener):

    String videoUri = getVideoUriForPosition(position);
    // TODO check if videoUri is not null or something

    mPlayerView = (VideoView) mView.findViewById(R.id.video_player);
                mPlayerView.requestFocus();
    if(mPlayerView == null) {
       Log.e(TAG, "Video view null");
    } else {
       mPlayerView.setVideoURI(Uri.parse(videoUri));
       mPlayerView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

             public void onPrepared(MediaPlayer mp) {
                  mPlayerView.start();                  
       });
    }

Upvotes: 1

Related Questions