如何解决Android中错误膨胀类



我有一个自定义视图,它扩展了约束布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textViewMyTitle"
style="@style/LabelLowLevel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="My Title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/buttonEditMy"
style="@style/InlineButtonTransparent"
android:layout_width="wrap_content"
android:text="@string/edit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewMyTitle" />
<Button
android:id="@+id/buttonPlayMy"
style="@style/InlineButtonHot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/play"
app:layout_constraintStart_toEndOf="@+id/buttonEditMy"
app:layout_constraintTop_toBottomOf="@+id/textViewMyTitle" />
</androidx.constraintlayout.widget.ConstraintLayout>

该视图具有一些属性:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCard">
<attr name="Mytitle" format="string"/>
<attr name="Mydescription" format="string"/>
<attr name="Myid" format="string"/>
</declare-styleable>
</resources>

然后是相应的Java类:

public class MyCard extends ConstraintLayout {
public MyCard(@NonNull Context context) {
super(context);
}
public MyCard(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public MyCard(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
public MyCard(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs);
}
public String Description;
public String Topic;
public String MyId;
private void init(Context ctx, AttributeSet attrs) {
TypedArray CustomAttr = ctx.obtainStyledAttributes(attrs, R.styleable.MyCard);
Description = CustomAttr.getString(R.styleable.MyCard_Mydescription);
Topic = CustomAttr.getString(R.styleable.MyCard_Mytitle);
MyId = CustomAttr.getString(R.styleable.MyCard_Myid);
LayoutInflater inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.Mycard, this, true); // <<<<<< the error is raised here

CustomAttr.recycle();           
}
}

当运行代码时,我得到错误:

java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.colman.myapp/com.colman.myapp.Activity20_PersonalSpace}: 
android.view.InflateException: Binary XML file line #49 in com.colman.myapp:layout/activity_activity20_personal_space: 
Binary XML file line #49 in com.colman.myapp:layout/activity_activity20_personal_space: 
Error inflating class com.colman.myapp.Libraries.views.MyCard

有人知道如何解决这个问题吗?

谢谢。干杯

尝试更改布局的膨胀方式:

private void init(Context ctx, AttributeSet attrs) {
inflate(ctx, R.layout.Mycard, this);
TypedArray CustomAttr = ctx.obtainStyledAttributes(attrs, R.styleable.MyCard);
Description = CustomAttr.getString(R.styleable.MyCard_Mydescription);
Topic = CustomAttr.getString(R.styleable.MyCard_Mytitle);
MyId = CustomAttr.getString(R.styleable.MyCard_Myid);
CustomAttr.recycle();           
}

尝试更改

inflater.inflate(R.layout.Mycard, this, true);

inflater.inflate(R.layout.Mycard, this, false);

最新更新