保留片段 未保留

2023-12-31

我有一个包含 VideoView 的简单布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black"
android:gravity="center" >

<VideoView
    android:id="@+id/videoPlayer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

</RelativeLayout>

The Activity使用此布局创建一个Fragment启动视频视图

public class VideoPlayerActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_video_player);
            createNewWorkerFragment();
    }

        private void createNewWorkerFragment() {
            FragmentManager fragmentManager = getFragmentManager();
            VideoPlayerActivityWorkerFragment workerFragment = (VideoPlayerActivityWorkerFragment)fragmentManager.findFragmentByTag(VideoPlayerActivityWorkerFragment.Name);
            if (workerFragment == null) {
                workerFragment = new VideoPlayerActivityWorkerFragment();
                fragmentManager.beginTransaction()
                               .add(workerFragment, VideoPlayerActivityWorkerFragment.Name)
                               .commit();
            }
        }
}

The VideoPlayerActivityWorkerFragment如下:

public class VideoPlayerActivityWorkerFragment extends Fragment {

     public static String Name = "VideoPlayerActivityWorker";
     private VideoView mVideoPlayer;

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setRetainInstance(true);
         mVideoPlayer = (VideoView) mActivity.findViewById(R.id.videoPlayer);
         mVideoPlayer.setVideoPath(mActivity.getIntent().getExtras().getString("path"));
         MediaController controller = new MediaController(mActivity);
         controller.setAnchorView(mVideoPlayer);
         mVideoPlayer.setMediaController(controller);
         mVideoPlayer.requestFocus();
         mVideoPlayer.start();
     }

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

     @Override
     public void onDetach() {
        super.onDetach();
        mActivity = null;
     }
}

这是我遇到的问题,当VideoPlayerActivity开始VideoPlayerActivityWorkerFragment被创建并且VideoView开始播放,但是当我旋转设备时,视频停止并且不会播放,整个View似乎从布局中消失了。由于setRetainInstance(true);我以为VideoView会继续玩。有人可以让我知道我做错了什么吗?我在其他地方使用过这种模式(没有使用VideoView)并且它成功地允许旋转发生。

我不愿意使用android:configChanges="keyboardHidden|orientation|screenSize"或类似的方法,我想用以下方法处理方向变化Fragments.

预先感谢您的帮助。

Edit

我最终选择了我所做的解决方案,因为它有效。每次调用onCreateView时都需要重新创建videoview和controller,并且需要在onResume中设置播放位置并在onPause中记录。然而,在旋转过程中播放时断断续续。该解决方案不是最佳的,但它确实有效。


See mVideoPlayer = (VideoView) mActivity.findViewById(R.id.videoPlayer); Your VideoView由正在循环销毁和重新创建的活动创建。这意味着一个新的R.id.videoPlayer正在创建视频视图。所以你当地的mVideoPlayer只是在上面的行中被覆盖。您的片段需要创建VideoView在其 onCreateView() 方法中。即便如此,这可能还不够。因为视图本质上与其所属的上下文相关。也许显式暂停、检测并附加、播放视图将是更好的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保留片段 未保留 的相关文章

随机推荐

  • 如何在C中使用重定向进行文件输入

    我需要从终端获取文件 我知道命令将如下所示 a out lt fileName txt 我不确定如何在程序中使用 fgets 来使用从终端请求的文件 使用重定向将输入文件的内容发送到标准输入 因此您需要从代码内的标准输入读取 所以类似于 为
  • Gmail.Users.Messages.remove(me, id) - 未找到错误

    有没有其他人发现高级 Gmail 服务调用 Gmail Users Messages remove me id 现在出现错误 有人有解决办法吗 我有一个可靠的脚本 每隔几个小时就会删除垃圾邮件和垃圾邮件 自 17 年 2 月 21 日左右起
  • 写入响应正文后在 HttpServletResponse 上设置标头

    我发现了一个困难的方法 那就是不可能向一个HttpServletResponse在开始将响应主体写入输出缓冲区之后 我想在某些随机宇宙中这可能是有意义的 即使所有内容仍然只是缓冲在内存中 现在的问题是 是否有一些技巧可以以某种方式规避这个问
  • 获取数组中出现次数最多的元素

    我正在寻找一种优雅的方法来确定哪个元素出现次数最多 mode http en wikipedia org wiki Mode 28statistics 29 在 JavaScript 数组中 例如 在 pear apple orange a
  • 通过Asp.net背后的代码访问虚拟目录文件夹

    我正在尝试从代码隐藏访问虚拟目录文件夹 ASP Net 网站名称 SuperImages 物理文件夹 C images 虚拟目录文件夹 allimages 与App Data Scripts Properties文件夹处于同一级别 我正在尝
  • 如何使用 Fragments 在 TabLayout 中的每个选项卡中显示不同的布局

    我一直在尝试使用 PagerTabStrip 在可滑动的 TabLayout 中的不同选项卡中显示不同的布局 有人可以帮忙吗 我想在第一个选项卡中显示一个布局 在第二个选项卡中显示第二个不同的布局等 public class MainAct
  • Facebook PHP SDK 上传照片

    尝试将我的服务器上渲染的照片即时上传到用户的 Facebook 相册 由于 FB 文档非常 非常 非常糟糕 至少可以这么说 我希望有人向我展示一些使用 PHP SDK 进行图形 API 调用的优秀代码示例 像这样的东西 try facebo
  • 执行 R 代码时出现错误“无法将‘环境’类型强制转换为‘字符’类型的向量”

    require shiny setwd C Users Harshad Desktop Equiskill BA cars lt read table file cars csv sep header TRUE quote var list
  • 使用 Spring Boot 的 Feign 客户端:RequestParam.value() 参数 0 为空

    我使用 Spring Boot 创建了一个简单的 Feign 客户端 如下所示 FeignClient spring cloud eureka client public interface GreetingClient RequestMa
  • 交叉引用 github 中的提交

    我想在我的主存储库的 github 问题中引用其他存储库 在本例中为子模块 中的提交 是否可以在不输入完整超链接的情况下执行此操作 类似于 github 如何从提交号创建缩短的超链接 答案 这样我们懒人就可以找到它 而不需要点击链接GitH
  • 如何用python创建系统托盘弹出消息? (视窗)

    我想知道如何用 python 创建系统托盘弹出消息 我在很多软件中都看到过这些内容 但很难找到资源来使用任何语言轻松完成此操作 有人知道在 Python 中执行此操作的一些库吗 在的帮助下pywin32 library https sour
  • 使用resteasy-jaxrs 的简单示例不起作用

    当我访问该页面时 我无法收到 hello 消息 package jaxrs ressources import javax ws rs GET import javax ws rs Path import javax ws rs PathP
  • 将回调函数传递给 jQuery AJAX 成功函数

    我试图传入一个函数 以便在 AJAX 调用成功时运行 但是它不起作用 因为它说 回调不是函数 Example 调用代码 getGrades var JS function getGrades grading company Set file
  • 为什么 IdHTTPProxyServer 会更改请求的 HTTP 版本?

    最近 我发现IdHTTPProxyServer会自动将所有HTTP 1 1请求更改为HTTP 1 0请求 这对我来说有点奇怪 因为我认为代理服务器不应该更改 HTTP 版本 有什么方法可以强制代理服务器不更改 HTTP 版本吗 TIdHTT
  • 在 PHP 中将 64 位十六进制转换为浮点数

    我正在尝试将 64 位十六进制数转换为 PHP 中的浮点数 40F82C719999999A 如果我在 IEEE 754 浮点转换页面中运行它http babbage cs qc cuny edu IEEE 754 old 64bit ht
  • 使用什么框架从 iPhone 连接到 SQL Server 实例? [复制]

    这个问题在这里已经有答案了 我需要编写一个 iPhone 应用程序来连接 SQL Server 实例 但我不知道可以使用哪个框架来执行此操作 有我可以使用的 ODBC 框架吗 任何链接将不胜感激 请不要告诉我使用网络服务 因为这不适合这种情
  • 使用 office.js 在 Word 中插入注释

    我正在尝试在 office js 中制作一个 Word 插件 以在文档中插入注释 在我看来 实现这一目标的唯一方法是使用 OOXML 我可以插入评论 但我的问题是 当我这样做时 会插入一个段落分隔符 并且可以从该图像中看到 据我所知 归结为
  • 如何将列表居中?

    我有一个无序列表 我想将它放在页面中间 我的意思是 左侧项目符号应该与具有最长文本的列表项的中心垂直对齐 但位于页面的中心 第 1 项很无聊 第 2 项确实是一个很长的项目 哦 是的 它是 第 3 项几乎和第 1 项一样无聊 并不是 ite
  • 滑动 UITableViewCell

    我的目标是拥有一个UITableViewCell从屏幕的一侧滑出 如 Twitter 然后从另一侧滑回 我能够使单元格从屏幕向右滑动 但我似乎无法弄清楚如何让它从左向右滑回到屏幕上 这是我将其滑到右侧的代码 UITableViewCell
  • 保留片段 未保留

    我有一个包含 VideoView 的简单布局