You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发TestFragment改继承AppCompatActivity后类型转换报错如何解决

解决方案

核心问题是混淆了Fragment和Activity的组件定位,Java本身不支持类多继承,不需要强行修改继承结构,直接在原生Fragment中就可以实现WebView加载视频的需求,步骤如下:

  1. 恢复TestFragment的继承关系,保持继承自Fragment,不要改为AppCompatActivity
  2. 将WebView逻辑迁移到Fragment的onViewCreated生命周期方法中,控件从你之前inflate出来的布局对象中查找
  3. 把WebView控件添加到你原来的fragment_test.xml布局中即可

正确的TestFragment代码示例:

public class TestFragment extends Fragment {
    private View view;
    private WebView webView;
    String youTubeUrl = "https://www.youtube.com/embed/47yJ2XCRLZs";
    String frameVideo = "<html><body>Video From YouTube<br><iframe width=\"420\" height=\"315\" " +
            "src='" + youTubeUrl + "' frameborder=\"0\" allowfullscreen>" +
            "</iframe></body></html>";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 加载Fragment的布局,注意fragment_test.xml中需要添加id为webView的WebView控件
        view = inflater.inflate(R.layout.fragment_test, container, false);
        return view;
    }

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 从Fragment加载的布局中查找WebView控件
        webView = view.findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadData(frameVideo, "text/html", "utf-8");
        // 剩余WebView配置逻辑直接在这里补充即可
    }
}

如果你确实需要用Activity承载视频页面,就不要使用加载Fragment的逻辑,把按钮点击事件改为跳转Activity即可:

case R.id.btn_test:
    // 直接跳转视频页面,注意把原来继承AppCompatActivity的类改名为TestActivity,避免命名混淆
    Intent intent = new Intent(getActivity(), TestActivity.class);
    startActivity(intent);
    break;

内容的提问来源于stack exchange,提问作者BinDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:09:00