我正在尝试定义一个类似的类,所以我可以用XML显示它:
public class MyLineChart extends com.github.mikephil.charting.charts.LineChart {
private Context mContext;
public MyLineChart(Context context) {
super(context);
mContext = context;
}
public MyLineChart(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
public LineChart(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
}
// ...
}
所以当我定义这个对象时,我正在做:
mChart = (MyLineChart) findViewById(R.id.line_chart);
但是如果我想通过构造函数发送其他参数呢?例如,假设MyLineChart
类有另一个字段:
private int mSomeInt;
我希望能够通过构造函数设置mSomeInt
所以我不仅要将mContext
设置为context
,还要将mSomeInt
设置为我传递的某个整数in。我使用整数作为例子,但技术上可以是任何参数。
可以这样做吗?
答案 0 :(得分:1)
所以当我定义这个对象时,我正在做:
mChart = (MyLineChart) findViewById(R.id.line_chart);
此处,虽然您要分配mChart
变量,但您没有创建MyLineChart
对象,而只是将已创建的对象分配给mChart
。
如果在某个xml文件中定义(就像我认为你已经完成的那样),那么你的类将由Android创建,使用以下构造函数:
public MyLineChart(Context context, AttributeSet attrs) {
...
}
您可以从xml传入属性,您可以在其中解析attrs
以提取其值。如果您尝试传入常量值(例如视图的颜色或某个默认值),请参阅this guide,了解如何在视图中使用自定义属性。
如果您希望设置一些在运行时只知道的值,您可以:
使用setter
我推荐这种方法。只需向MyLineChart
添加方法
void setMyValue(int myValue) {
mMyValue = myValue;
//notify parts of the view that this property has changed
...
}
以编程方式创建对象。
这里你没有在xml中包含视图,而是以编程方式创建它来替换
mChart = (MyLineChart) findViewById(R.id.line_chart);
与
mChart = new MyLineChart(context, myValue);
//code that adds the view to the layout like a LinearLayout etc.
...
为此,您可以为MyLineChart
创建一个新的构造函数,类似于
public MyLineChart(Context context, int myValue) {
super(context);
mContext = context;
mMyValue = myValue;
}