java - 将数据传递给 Android 中的自定义 View

标签 java android

我是 Android 的新手,正在尝试创建一个自定义 View 来显示饼图。我对 Java 还行,之前在 iOS/Swift 中编写过饼图代码。

我的问题是数据似乎没有像我预期的那样传递,或者可能是在从父类(super class)以某种方式设置数据之前调用了 onDraw 函数。

我想知道在 onDraw 函数中使用的传递数据的最佳方法。到目前为止,在 Android Custom View Constructor 等帖子的帮助下我有以下代码:

public PieChart(Context _context) {
    this(_context, null);
}
public PieChart(Context _context, AttributeSet _attrs) {
    this(_context, _attrs, null);
}
public PieChart(Context _context, AttributeSet _attrs, ArrayList<ChartData> _data) {
    super(_context, _attrs);
    if(this.isInEditMode()) {
        data = new ArrayList<ChartData>();
        data.add(new ChartData("Column A", 50));
        data.add(new ChartData("Column B", 75));
        data.add(new ChartData("Column C", 60));
    } else {
        data = _data;
    }
    context = _context;
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    pieRectangle = new RectF(0,0,0,0);
    ...
}

这是从我的 Activity 中调用的:

// create the chart
PieChart pieChart = new PieChart(this, null, categoriesChartData);
// add the chart to the linearLayout
linearLayout.addView(pieChart);

我的 PieChart.onDraw 是这样开始的:

protected void onDraw(Canvas canvasChart) {
    Log.d(TAG, "Size of data = " + data.size()); // crashes here
    ...
}

请注意,在界面设计器中,饼图看起来很棒,所以我知道 onDraw 方法有效,只是当应用程序运行时数据没有出现在那里。

我没有添加额外的函数和调用,因为我在 Android 方面没有太多经验,我想问问社区问题是什么,最好的方法是什么。

非常感谢!

最佳答案

既然您提到了界面设计器,我假设您也将您的 View 添加到了 XML 布局中。在这种情况下,Android View 框架将使用此构造函数(按照惯例):

public PieChart(Context _context, AttributeSet _attrs)

这就是为什么您的 datanull 的原因。对于 View ,您必须为数据创建一个 setter 方法,而不是将其作为构造函数参数传递。

此外,如果您已经在 XML 布局中声明了您的 View ,则无需手动创建它 - 这只会将另一个 View 添加到布局中。

关于java - 将数据传递给 Android 中的自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40462728/

相关文章:

Java:从BitSet中提取整数,每个整数由特定的位数组成

java - 处理 Android 应用程序上的数据

android - 在 Android studio 中打开 Unity Project 时 Resource Not found 异常

android - 如何增加 webrtc 中的麦克风增益

java - 在Fragment中使用ListView

java - 从死信 channel 重新传递消息

java - 警报对话框打不开

java - 在 OpenSSL 中完成的 AES 加密成功解密,但在 Java 中加密时失败

android - 如何删除提交到Google Play商店的内测应用?

java - HDFS API 在尝试从中获取数据时抛出错误