2016-05-16 2 views
0

Я хочу получить значения для записи x, которая является строкой при нажатии на сектор пирога. как? Я могу получить значение y, используя getVal(), но как насчет x? Значение для ввода оси x - из sqlite. Код является таким, как показано нижеMPAndroidChart -get значение x entry

public class chart extends Activity { 

private FrameLayout chartContainer; 
private PieChart mChart; 

Context CTX = this; 
DatabaseOperations DOP; 

@Override 
protected void onCreate (Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.chart); 
    chartContainer=(FrameLayout) findViewById(R.id.chartContainer); 
    mChart=new PieChart(this); 
    //add pie chart to the layout 
    chartContainer.addView(mChart); 

    //enable hole and configure 
    mChart.setDrawHoleEnabled(true); 
    mChart.setHoleColorTransparent(true); 

    mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { 
     @Override 
     public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {    if (e == null) 
       return; 
      Toast.makeText(chart.this, xVals.get(e.getXIndex()) + " used " + e.getVal() + "kwh", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onNothingSelected() { 

     } 
    }); 

    //add data 
    addeachData(); 

    Legend l=mChart.getLegend(); 
    l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART); 
} 

protected void addeachData() { 
    DatabaseOperations DOP = new DatabaseOperations(CTX); 
    Cursor CR = DOP.getInformation(DOP); 
    int count=CR.getCount(); 

    float[]values=new float[count]; 
    String[]name=new String[count]; 

    for (int m=0; m<count; m++){ 
     CR.moveToNext(); 
     name[m]=CR.getString(0); 
     values[m]=CR.getFloat(1); 
    } 
    ArrayList<Entry> yVals = new ArrayList<Entry>(); 

    for (int i = 0; i <name.length; i++) 
     yVals.add(new Entry(values[i], i)); 

    final ArrayList<String> xVals = new ArrayList<String>(); 

    for (int i = 0; i <name.length; i++) 
     xVals.add(name[i]); 

    ArrayList<Integer> colors=new ArrayList<Integer>(); 
    for(int c: ColorTemplate.VORDIPLOM_COLORS) 
     colors.add(c); 
    colors.add(ColorTemplate.getHoloBlue()); 
    dataSet.setColors(colors); 

    PieData data=new PieData(xVals, dataSet); 
    data.setValueFormatter(new PercentFormatter()); 
    data.setValueTextSize(11f); 
    data.setValueTextColor(Color.GRAY); 

    mChart.setData(data); 
    mChart.highlightValues(null); 
    mChart.invalidate(); 
} 

}

ответ

0

В кулака вы объявили об ArrayList, как «xVals» для хранения значений оси х. Измените его на финал, чтобы он был доступен из внутренних классов.

final ArrayList<String> xVals = new ArrayList<String>(); 

Затем используйте метод getXIndex() из объекта ввода. Например:

xVals.get(entry.getXIndex()); 
+0

Я не могу получить доступ к xVal, я обновил свой код. Можете ли вы мне помочь? спасибо – whoami

+0

Я положил объявление xvals вверх с контекстом и базой данных, и теперь это сработало. Спасибо – whoami

Смежные вопросы