2016-05-16 12 views
0

円のセクタをクリックしたときに文字列であるxエントリの値を取得したいとします。どうやって?私はgetVal()を使ってyの値を得ることができますが、xはどうですか? x軸エントリの値はsqliteの値です。コードは、あなたは、x軸の値を保持するための「xVals」等のArrayListを宣言拳で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

下に示されています。内部クラスからアクセスできるようにfinalに変更します。

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

次に、エントリオブジェクトからgetXIndex()メソッドを使用します。例:

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

私はxValにアクセスできません。自分のコードを更新しました。あなたはそれで私を助けることができますか?ありがとうございました – whoami

+0

xvalの宣言をコンテキストとデータベースに入れて、今すぐ動作しました。ありがとうございました – whoami

関連する問題