加载highchart时Android错误膨胀类<未知>

Posted

技术标签:

【中文标题】加载highchart时Android错误膨胀类<未知>【英文标题】:Android error inflating class <unknown> while loading highchart 【发布时间】:2021-07-30 10:13:27 【问题描述】:

我正在尝试通过Dialog 加载highcharts。下面是我的代码

Gradle

implementation 'com.highsoft.highcharts:highcharts:9.0.1'

XML

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:padding="10dp"
android:scrollbars="none">

<LinearLayout
    android:layout_
    android:layout_
    android:background="@color/white"
    android:orientation="vertical"
    android:padding="10dp">

    <com.highsoft.highcharts.core.HIChartView
        android:id="@+id/goly_gauge"
        android:layout_
        android:layout_height = "350dp"

        />

    <com.highsoft.highcharts.core.HIChartView
        android:id="@+id/golm_gauge"
        android:layout_
        android:layout_
        />

      <Button
        android:id="@+id/ok"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:text="OK" />
</LinearLayout>

</ScrollView>

片段

 suggestion_list.setOnItemClickListener((parent, view, position, id) -> 
        String selectedFromList = (String) (suggestion_list.getItemAtPosition(position));
        showPreFilledData(selectedFromList);
        Log.e(TAG, arraylist.get(position));
    );

private void showPreFilledData(String string) 

    final Dialog dialog = new Dialog(getActivity());
    dialog.setContentView(R.layout.product_sales_layout);// error comes at this point
    dialog.setTitle("Product Sales");
    Button ok;
    ok = (Button) dialog.findViewById(R.id.ok);

    switch (string) 
        case "A2A 100 MG TABS":
            GolYgauge(55.1);
            GolMgauge(32.9);
            break;
        case "AQUA-VIT SACHET":
            GolYgauge(45.8);
            GolMgauge(22.7);
            break;
        case "BRONCOPHYLINE SYRUP":
            GolYgauge(65.7);
            GolMgauge(42.4);
            break;
    

    ok.setOnClickListener(v -> dialog.dismiss());
    Window window = dialog.getWindow();
    window.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT);
    dialog.show();


当我单击 list view 中的某个项目时,我想打开一个布局并希望在仪表内显示数据。但我收到错误

android.view.InflateException:com.thumbsol.accuratemobileassetsmanagament:layout/product_sales_layout 中的二进制 XML 文件第 15 行:com.thumbsol.accuratemobileassetsmanagament:layout/product_sales_layout 中的二进制 XML 文件第 15 行:膨胀类时出错

第 15 行是&lt;com.highsoft.highcharts.core.HIChartView。我坚持下去。如何摆脱这个问题?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

似乎是 Dialog 类包装了 Activity 上下文和库的 HIChartView 无法处理这个包装的上下文的组合。我强制解开上下文,然后您的代码开始工作。如何:

使用处理包装上下文的自定义实现扩展HIChartView

import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.util.AttributeSet;

import com.highsoft.highcharts.core.HIChartView;

public class CustomHIChartView extends HIChartView 

    public CustomHIChartView(Context context) 
        super(unwrap(context));
    

    public CustomHIChartView(Context context, AttributeSet attributeSet) 
        super(unwrap(context), attributeSet);
    

    // unwrap the context until I get the original passed-in Activity context
    private static Activity unwrap(Context context) 
        while (!(context instanceof Activity) && context instanceof ContextWrapper) 
            context = ((ContextWrapper) context).getBaseContext();
        
        return (Activity) context;
    

解包函数是从https://***.com/a/51640906/12321475 复制而来的,您还可以在此处了解为什么有时会打包基本上下文。

修改您的布局以使用自定义实现:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:padding="10dp"
    android:scrollbars="none">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:padding="10dp">

        <your.package.name.CustomHIChartView
            android:id="@+id/goly_gauge"
            android:layout_
            android:layout_height = "350dp"

            />

        <your.package.name.CustomHIChartView
            android:id="@+id/golm_gauge"
            android:layout_
            android:layout_
            />

        <Button
            android:id="@+id/ok"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:text="OK" />
    </LinearLayout>

</ScrollView>

【讨论】:

以上是关于加载highchart时Android错误膨胀类<未知>的主要内容,如果未能解决你的问题,请参考以下文章

Android:二进制 XML 文件行错误膨胀类

android.view.inflateexception 二进制 xml 文件第 7 行错误膨胀类片段

Android错误膨胀类android.support.constraint.ConstraintLayout

膨胀类 android.support.v7.widget.RecyclerView 时出错

android.view.InflateException 膨胀类片段时出错,二进制 XML 文件第 1 行?

Android 活动未在某些设备上启动(错误膨胀类)