2016-05-16 25 views
0

我想獲取x條目的值,這是在餅圖扇區上單擊時的字符串。怎麼樣?我可以使用getVal()獲得y值,但x怎麼樣? x軸入口的值來自sqlite。該代碼被如下所示MPAndroidChart - 獲取x條目的值

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

在拳頭你聲明如「xVals」用於保持X軸的值的ArrayList。將其更改爲final,以便可以從內部類訪問。

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

然後使用來自入口對象的getXIndex()方法。例如:

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

我無法訪問xVal,我更新了我的代碼。你能幫我嗎?謝謝 – whoami

+0

我把xvals的聲明和上下文和數據庫放在一起,它現在可以工作了。謝謝 – whoami