升级Android Studio Dolphin版本有一段时间,一直以为是XML布局无法预览是一个bug,随装了几个老版本来回切换使用,等后续会升级修复,结果到写文章时也还没修复,期间也尝试修改自己的代码解决,尝试了一些,还去Google上检索,有用的文章比较少,那就只能自己定位问题,看看如何解决。

首先可以发现的是,只要是自定义的view都有几率无法预览,所以参照这个思路解决。

The following classes could not be instantiated

layoutlib_._internal_.kotlin.KotlinNullPointerException   
  at xxx.AppCompatInputView.init(AppCompatInputView.kt:196)   
  at xxx.AppCompatInputView.<init>(AppCompatInputView.kt:29)  
  at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2)   at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)   at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)   at java.lang.reflect.Constructor.newInstance(Constructor.java:490)   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)   at android.view.LayoutInflater.inflate(LayoutInflater.java:663)   at android.view.LayoutInflater.inflate(LayoutInflater.java:505) Copy stack to clipboard

这里提示有个空指针异常,代码如下

val attr = context.theme.obtainStyledAttributes(attrs, R.styleable.AppCompatMyEditView, 0, 0)
val text = attr.getString(R.styleable.AppCompatMyEditView_HintText)
setEditTextHitText(text!!)

修改一下代码,将setEditTextHitText方法的判空加上,重新Build & Refresh,预览就可以解决。

Failed to find the style corresponding to the id -1

这个错误非常的明显,以往我们写View的时候,习惯写成如下

public MyTextView(Context context){
        this(context,null)
}
public MyTextView(Context context, AttributeSet attr){
    this(context,attr,-1)
}

有问题就是上方的代码-1,修改成标准的自定义写法即可

public MyTextView(Context context){
        super(context,null)
        init(context,null,0)
}
public MyTextView(Context context, AttributeSet attr){
    super(context,attr)
    init(context,null,0)
}

修改一下,布局即可正常预览

最后修改:2022 年 11 月 12 日
如果觉得我的文章对你有用,请随意赞赏