如何让 videoView 在片段内播放?

Posted

技术标签:

【中文标题】如何让 videoView 在片段内播放?【英文标题】:How do I get a videoView to play inside a fragment? 【发布时间】:2014-02-19 22:30:04 【问题描述】:

我对片段非常陌生,我正在尝试将 videoView 加载到片段中。我的布局文件布局正确(因为我可以很好地在图像之间滑动),但我不确定如何将 videoView 加载到片段中。我的活动代码如下:

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;


例如,我不确定将告诉 videoView 在 page1 中播放视频的代码放置在何处或如何放置。我应该把它放在哪里,它会是什么样子?

【问题讨论】:

【参考方案1】:

有点题外话: 您确定您使用的是片段而不仅仅是视图吗?据我所知,您可以添加和删除视图。

或者你在布局文件中做了什么?如果有,能否提供xml布局资源?

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

关于您的问题: 调用 addView 后,您可以执行以下操作(或将其添加到按钮侦听器):

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

【讨论】:

以上是关于如何让 videoView 在片段内播放?的主要内容,如果未能解决你的问题,请参考以下文章

Android 7 上的 VideoView 错误

播放android studio时片段中的VideoView没有声音

如何让 VideoView 播放带有 Drive 链接的视频?

片段内的VideoView导致黑屏闪烁

如何在片段中播放视频

如何通过单击 Android 中的按钮使 VideoView 全屏显示?