2017-03-24 20 views
1

私は小さな問題があります。私は、xAxisがカテゴリを表すBarChartsとyAxis - costのlistViewを作成しようとしています。ValueFormatter throws IndexOutOfBoundsException

ここは私のデータです。 エントリ

entries.add(new BarEntry(xAxis, cost, categoryName)); 

X軸はチャートのジャストの位置で、私は3番目のパラメータとして、カテゴリ名を置きます。それから私はその後、アダプタにIが値フォーマッタ

BarData data = getItem(position); 
... 
xAxis.setValueFormatter(new MyValueFormatter(data.getDataSetByIndex(0))); 

を設定し、MyValueFormatterに、私はエントリからカテゴリ名を取得し、X軸値として設定しようとしているBarData

ArrayList<BarData> months = new ArrayList<>(); 
BarDataSet set = new BarDataSet(entries, monthName); 
ArrayList<IBarDataSet> dataSets = new ArrayList<>(); 
dataSets.add(set); 
BarData barData = new BarData(dataSets); 
months.add(barData); 

の配列リストにそれを置きます。

public class MyValueFormatter implements IAxisValueFormatter { 

private IBarDataSet mDataSet; 

public StatisticByMonthValueFormatter(IBarDataSet data) { 
    mDataSet = data; 
} 

@Override 
public String getFormattedValue(float value, AxisBase axis) { 
    return (String) mDataSet.getEntryForIndex((int) value).getData(); 
} 
} 

この中華鍋、私は、リストビューをスクロールしていたときに、時々私は私が知っている

java.lang.IndexOutOfBoundsException: Invalid index 4, size is 2. 

を取得し、そのバグMyValueFormatterでgetFormattedValue方法で、しかし、私は私が修正できる方法を理解していませんこれ、またはこれを正しい方法でどのように実装するのか?

答えて

1

DataSet#getEntryForIndex(int index)

ここに呼び出すための間違った方法です。 EntryDataSetにある場合は、バッキングアレイに格納され、この方法ではバッキングアレイのインデックスにEntryが得られます。これは、そのx値(グラフのx値)の場合、必ずしもEntryに対応するとは限りません。したがって、IndexOutOfBoundsException

あなたはこの代わりに何かをしたいと思う:

return (String) mDataSet.getEntryXPos(float value).getData();

が助けをさらに説明するために

+0

感謝をjavadoc for DataSetを参照してください、今では正常に動作します。しかし、私のMPChartのバージョンでは、getEntryXPosメソッドはありません。代わりにgetEntryForXValueを使用しました。 –

+0

@Alexandr私はあなたの問題を解決してうれしいです。あなたは答えを受け入れることができます(緑色のダニ) –

関連する問題