2

Im mit der horizontalen MPAndroid-Diagramm, um Einkommen/Aufwand anzuzeigen und das Diagramm funktioniert für die meisten. Ich kann die angezeigten Informationen ändern, obwohl ich es nur ändern kann, wenn ich es in OnViewCreated mache. Es passiert überhaupt nichts, wenn ich es von der Aktivität aus mache, in der das Fragment angezeigt wird, und ich habe absolut keine Ahnung warum. Obwohl ich mir nicht 100% ig sicher bin, ob ich die Daten richtig setze.MPAndroid Chart - Diagramm nicht aktualisiert

public class BudgetFragment extends Fragment{ 

private HorizontalBarChart mainChart; 
private BarData data; 
private BarDataSet dataset1; 
private BarDataSet dataset2; 

private int expenseSum = 0; 
private int incomeSum = 0; 

public MainActivityBudgetFragment(){ 

} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.budget_fragment, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    mainChart = (HorizontalBarChart) view.findViewById(R.id.mainBudgetChart); 

    ArrayList<BarEntry> entries1 = new ArrayList<>(); 
    ArrayList<BarEntry> entries2 = new ArrayList<>(); 

    entries1.add(new BarEntry(10000, 5)); 
    entries2.add(new BarEntry(10000, 5)); 

    dataset1 = new BarDataSet(entries1, "income"); 
    dataset2 = new BarDataSet(entries2, "expense"); 

    //X-axis labels 
    ArrayList<String> xVals = new ArrayList<String>(); 
    xVals.add("income"); xVals.add("expense"); 

    ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>(); 
    dataSets.add(dataset1); 
    dataSets.add(dataset2); 

    //Add to chart 
    data = new BarData(xVals, dataSets); 


    mainChart.setData(data); 

    //Description and animation 
    mainChart.setDescription(""); // set the description 
    mainChart.setScaleYEnabled(false); 
    mainChart.setTouchEnabled(false); 
    mainChart.animateY(2000); 

    setDataExpense(200);//(This works fine) 
    setDataIncome(200); //(This works fine) 
} 

public void updateDataExpense(){ 
    Log.e("updateTag", "Updated expense"); 

    dataset2.removeEntry(1); 
    data.addEntry(new BarEntry(expenseSum, 1), 1); 
    dataset2.setColor(getResources().getColor(R.color.orange)); 
    mainChart.notifyDataSetChanged(); // let the chart know it's data changed 
    mainChart.invalidate(); // refresh 
} 

public void updateDataIncome(){ 

    Log.e("updateTag", "Updated Income"); 
    dataset1.removeEntry(0); 
    data.addEntry(new BarEntry(newIncome, 0), 0); 
    dataset1.setColor(getResources().getColor(R.color.green)); 
    mainChart.notifyDataSetChanged(); // let the chart know it's data changed 
    mainChart.invalidate(); // refresh 
} 

//(These do not work when called outside OnViewCreated) 
private void setDataExpense(int sum){ 
    expenseSum = (expenseSum + sum); 
    Log.d("ResumeTag", "expense set at " + expenseSum); 
    updateDataExpense(); 
} 

private void setDataIncome(int sum){ 
    incomeSum = (incomeSum + sum); 
    Log.d("ResumeTag", "income set at " + incomeSum); 
    updateDataIncome(); 
} 

}

Lassen Sie mich wissen, ob ich etwas vergessen haben, wichtig. Ich habe nicht viel Erfahrung in Fragen zu Stackoverflow.

Vielen Dank für Ihre Hilfe! // Chris

Antwort

0

Bitte versuchen Sie dies:

public void updateDataIncome() { 
    Log.e("updateTag", "Updated Income"); 
    dataset1.removeEntry(0); 
    data.addEntry(new BarEntry(newIncome, 0), 0); 
    dataset1.setColor(getResources().getColor(R.color.green)); 

    data.notifyDataChanged(); // NOTIFIES THE DATA OBJECT 

    mainChart.notifyDataSetChanged(); // let the chart know it's data changed 
    mainChart.invalidate(); // refresh 
} 
0

Ihre Frage nicht sagen, welche Maßnahmen für die durchgeführt Sie die Daten aktualisiert werden, erwarten. Bei jeder Aktion, die die Daten aktualisieren sollen, sollten Sie einen der Listener haben und dann Ihre Funktionen aufrufen, die die Daten auffüllen, die Sie aktualisieren möchten.

Zum Beispiel in diesem Code auf die Auswahl eines Wertes in Spinner, onItemSelected (..) ruft & innerhalb es aufgerufen wird, rufen wir die Populate-Funktion, die die Daten aktualisiert. Dies ist Teilcode, aber Sie finden ein vollständiges Beispiel für die Verwendung von Adapter & OnItemSelectedListener. Hoffe das hilft dir.

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, monthList); 
     // Setting the array adapter containing country list to the spinner widget 
     spinnerMonth.setAdapter(adapter); 
     AdapterView.OnItemSelectedListener monthSelectedListener = new AdapterView.OnItemSelectedListener() 
     { 

      @Override 
      public void onItemSelected(AdapterView<?> spinner, View container, 
             int position, long id) { 
       Log.d("Logger:MainAct"," onItemSelected:Entry::::"); 
       tvMonth.setText("Chart for "+strMonth[position]); 
       populateChartByMonth(strMonth[position]); 
       //Toast.makeText(getApplicationContext(), "Success : " + strMonth[position], Toast.LENGTH_SHORT).show(); 
       Log.d("Logger:MainAct"," onItemSelected:Exit::::"); 
      } 


      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 
       Log.d("Logger:MainAct"," onNothingSelected:Entry/Exit"); 

      } 
     }; 
0
entries1.add(new BarEntry(10000, 5)); 

Dieser Wert x Zeile 1 ist und Y-Wert 10000

entries1.add(new BarEntry(5,10000)); 
Verwandte Themen