私は単純な方法に実装しました:
@Override
protected void addDataSet(int day) {
LineData lineData = this.lineChart.getData();
if(lineData != null) {
ArrayList<Entry> yValues = new ArrayList<Entry>();
for(int i = 0; i < this.measureDataListEntries.size(); i++) {
String stringValue = this.measureDataListEntries.get(i).getValue();
int dayOfWeek = Helper.getDayOfWeek(this.measureDataListEntries.get(i).getTime());
float value = Float.parseFloat(stringValue);
if(dayOfWeek == day) {
yValues.add(new Entry(value, i));
}
}
String label = this.getLabel(day);
int color = this.getColor(day);
LineDataSet lineDataSet = new LineDataSet(yValues, label);
lineDataSet.setColor(color);
lineDataSet.setCircleColor(color);
lineDataSet.setLineWidth(1f);
lineDataSet.setCircleSize(4f);
lineDataSet.setFillAlpha(65);
lineData.addDataSet(lineDataSet);
this.lineChart.notifyDataSetChanged();
this.lineChart.invalidate();
this.lineChart.animateX(1000);
if(yValues.size() > 0) {
this.getCheckBox(day).setEnabled(true);
}
}
}
@Override
protected void removeDataSet(int day) {
LineData lineData = this.lineChart.getData();
if(lineData != null) {
String label = this.getLabel(day);
lineData.removeDataSet(lineData.getDataSetByLabel(label, true));
this.lineChart.notifyDataSetChanged();
this.lineChart.invalidate();
this.lineChart.animateX(1000);
}
}
起動時に、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日の 7 つの異なるデータセットを追加します。データセットの追加と削除は、データセットの最初の位置にある日 (この場合は月曜日) を除くすべての日に機能します。remove メソッドは正しく呼び出されますが、データセットは削除されません。追加は常に機能します。
最初の位置のデータセットのみを削除できません
回避策はありますか?
編集
からの削除に使用されるコードMPAndroidChart
は次のとおりです。
public T getDataSetByLabel(String label, boolean ignorecase) {
int index = getDataSetIndexByLabel(mDataSets, label, ignorecase);
if (index <= 0 || index >= mDataSets.size())
return null;
else
return mDataSets.get(index);
}
<= 0
だけでなく、なぜあるの< 0
ですか?
もちろん、最初の位置にダミーのデータセットを追加すると機能しますが、私はそのような醜いコーディングの友人ではありません。削除するために index = 0 を受け入れないのはなぜですか?