自定义 Webview 上的 ClassCastException

Posted

技术标签:

【中文标题】自定义 Webview 上的 ClassCastException【英文标题】:ClassCastException on custom Webview 【发布时间】:2013-10-17 14:32:01 【问题描述】:

在我的 onCreate 中,我有:

MyWebView webView = new MyWebView(this, null);
webView = (MyWebView) findViewById(R.id.pdf);

Deal 类中的自定义 webview 类:

public class MyWebView extends WebView 

     Paint p = new Paint();

     public MyWebView(Context context, AttributeSet attrs) 
        super(context, attrs);
    

    @Override protected void onDraw(Canvas canvas) 

         super.onDraw(canvas);
         p.setColor (Color.RED);
         canvas.drawLine (20, 10, 300, 400, p);
     
 

XML:

<im.magic.dealpdf.Deal.MyWebView
    android:id="@+id/pdf"
    android:layout_weight="0.4"
    android:layout_margin="5dp"
    android:layout_
    android:layout_/>

错误表明它没有找到类 im.magic.dealpdf.Deal.MyWebView。为什么会出现错误?将 xml 更改为 im.magic.dealpdf.Deal 会导致 cannot be cast to android.view.View

更新:我认为我需要在我的 Deal 类中扩展 View。但它已经扩展了 Activity

【问题讨论】:

尝试清理并再次构建您的项目,这可能会起作用 【参考方案1】:

你不应该以这种方式使用内部类,将 MyWebView 声明为

public static class MyWebView extends WebView 
...

否则无法在 Deal 实例之外创建 MyWebView 实例。 不能在布局文件中以这种方式引用内部类,因为here 你必须写这样的东西:

<view class="im.magic.dealpdf.Deal@MyWebView" 
    android:id="@+id/pdf"
    android:layout_weight="0.4"
    android:layout_margin="5dp"
    android:layout_
    android:layout_/>

【讨论】:

以上是关于自定义 Webview 上的 ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何在同一 ScrollView 中的 WebView 上方添加自定义视图

uni-app 自定义webview大小

取消在 Android 上的 WebView 中加载

版本 53 但不是版本 54 上的 Android WebView SSL 错误

Flutter,WebView - 使用自定义 HTML 重建

Android WebView开发:自定义WebView工具框