我在安卓端使用MPAAndroidChart进行图表展示,用的LineChart折线图,有个问题,我拿到一堆数据,有月份和年份的数据,根据里面的年月份自定义x轴标签,因为年份跟月份的数据长度不一样,我想实现点击按钮在同一个折线图里切换年月数据,但是就在自定义x轴下标那里出现了数组越界问题
代码类似于这样,因为月份的数据比年份的多,然后切换到年份的时候,就产生了数组越界
我在安卓端使用MPAAndroidChart进行图表展示,用的LineChart折线图,有个问题,我拿到一堆数据,有月份和年份的数据,根据里面的年月份自定义x轴标签,因为年份跟月份的数据长度不一样,我想实现点击按钮在同一个折线图里切换年月数据,但是就在自定义x轴下标那里出现了数组越界问题
该回答引用GPTᴼᴾᴱᴺᴬᴵ
如果月份和年份的数据长度不同,那么就需要根据当前展示的是年份数据还是月份数据来设置标签数量和数据源。你可以尝试在切换数据时,动态设置标签数量和自定义样式的数据源,以避免数组越界的问题。
例如,你可以定义两个数组来分别存储年份和月份的标签,然后根据当前展示的数据源来设置标签数量和自定义样式的数据源:
String[] yearLabels = new String[]{"2019", "2020", "2021"};
String[] monthLabels = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
// 初始化时默认展示年份数据
String[] labels = yearLabels;
xAxis.setLabelCount(labels.length);
// 自定义样式
XAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
int index = (int) value;
if (index >= 0 && index < labels.length) {
return labels[index];
}
return "";
}
});
// 切换到月份数据
private void switchToMonthData() {
labels = monthLabels;
xAxis.setLabelCount(labels.length);
chart.notifyDataSetChanged();
chart.invalidate();
}
// 切换到年份数据
private void switchToYearData() {
labels = yearLabels;
xAxis.setLabelCount(labels.length);
chart.notifyDataSetChanged();
chart.invalidate();
}
注意,每次切换数据后,需要调用 chart.notifyDataSetChanged() 和 chart.invalidate() 方法来刷新图表,否则标签数量和自定义样式的数据源不会生效。