【问题标题】:MPAndroidChart create new charts with button clickMPAndroidChart 通过单击按钮创建新图表
【发布时间】:2017-11-01 23:47:08
【问题描述】:

是否可以通过单击单选按钮或单击任何其他按钮来用另一个图表覆盖图表或在第一个图表下创建一个新图表?我需要 3 个条形图,或者它们都在彼此下方,或者需要一个可以通过单击按钮或单击单选按钮来刷新新数据的图表。

https://pastebin.com/b1D5aAPr

这就是我的想法。

package com.example.zozo07.mobile;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;

import com.concretepage.android.R;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;

import java.util.ArrayList;

public class ChartActivity extends AppCompatActivity{

    private BarChart barChart;
    private RadioButton rbA, rbC, rbD;

    private BarDataSet barDataSet;
    private ArrayList<BarEntry> barEntries;
    private ArrayList<String> theTitles;
    private BarData theData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chart);

        barChart = (BarChart) findViewById(R.id.bargraph);
        rbA = (RadioButton) findViewById(R.id.rbA);
        rbC = (RadioButton) findViewById(R.id.rbC);
        rbD = (RadioButton) findViewById(R.id.rbD);
        Button btnCreate = (Button) findViewById(R.id.btnCreate);

        btnCreate.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                createBarGraph(new BarEntry(50f, 0), new BarEntry(100f, 1), new BarEntry(20f, 2), barEntries, theTitles, barDataSet, theData);
            }
        });

        registerButtons();

    }

    private void createBarGraph(BarEntry e, BarEntry e2, BarEntry e3, ArrayList<BarEntry> barEntries, ArrayList<String> theTitles, BarDataSet barDataSet, BarData theData) {
        barEntries = new ArrayList<>();
        barEntries.add(e);
        barEntries.add(e2);
        barEntries.add(e3);

        barDataSet = new BarDataSet(barEntries, "Data");

        theTitles = new ArrayList<>();
        theTitles.add("Alarm");
        theTitles.add("Sleep");
        theTitles.add("Vacation");


        theData = new BarData(theTitles, barDataSet);
        barChart.setData(theData);

        barChart.setTouchEnabled(true);
        barChart.setDragEnabled(true);
        barChart.setScaleEnabled(true);
    }

    public void registerButtons() {
        register(R.id.rbA);
        register(R.id.rbC);
        register(R.id.rbD);
    }

    private void register(int buttonResourceId){
        findViewById(buttonResourceId).setOnClickListener(buttonClickListener);
    }

    private OnClickListener buttonClickListener = new OnClickListener() {

        @Override
        public void onClick(View v){
            switch (v.getId()) {
                case R.id.rbA:
                    killBarChart();
                    barA();
                    break;
                case R.id.rbC:
                    killBarChart();
                    barB();
                    break;
                case R.id.rbD:
                    killBarChart();
                    barD();
                    break;
                default:
                    break;
            }
        }
    };

    private void barD() {
        createBarGraph(new BarEntry(30f, 0), new BarEntry(60f, 1), new BarEntry(100f, 2), barEntries, theTitles, barDataSet, theData);
    }

    private void barB() {
        createBarGraph(new BarEntry(20f, 0), new BarEntry(50f, 1), new BarEntry(90f, 2), barEntries, theTitles, barDataSet, theData);
    }

    private void barA() {
        createBarGraph(new BarEntry(80f, 0), new BarEntry(70f, 1), new BarEntry(20f, 2), barEntries, theTitles, barDataSet, theData);
    }

    protected void killBarChart() {
        barEntries = null;
        barDataSet = null;
        theTitles = null;
    }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!请拨打tour 并编辑您的问题,以展示您已经尝试如何解决问题。

标签: java android unit-testing onclick android-espresso


【解决方案1】:

是的,一旦您更改了数据集,您就可以轻松地覆盖它。创建一个创建图表的方法,然后单击按钮或单选调用该方法并将新值传递给它将更新您的图表。

【讨论】:

    【解决方案2】:

    它正在工作。我把我的 USB 线换成了另一根,现在我的安卓设备被 ADB 识别了,所以不需要模拟器,点击图表,它们就会改变。

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      相关资源
      最近更新 更多