Android开发TestFragment改继承AppCompatActivity后类型转换报错如何解决
解决方案
核心问题是混淆了Fragment和Activity的组件定位,Java本身不支持类多继承,不需要强行修改继承结构,直接在原生Fragment中就可以实现WebView加载视频的需求,步骤如下:
- 恢复
TestFragment的继承关系,保持继承自Fragment,不要改为AppCompatActivity - 将WebView逻辑迁移到Fragment的
onViewCreated生命周期方法中,控件从你之前inflate出来的布局对象中查找 - 把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
相关产品推荐
相关产品推荐

