获取活动中选择的图表

时间:2015-03-12 10:59:52

标签: android mpandroidchart

我正在使用最新版本的mpandroidchart库。我在单项活动上有2个条形图。 chart1& chart2是XML中的id(我不想使用条形图列表视图)。 chart1 cosnist Counts value& chart2包含美元价值。我已经获得了价值。但我想知道这是一个美元价值还是价值。所以我可以根据所选的图表显示吐司。

这是我的示例代码。

 public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {

    View view;
    TextView text;

    switch (e.getXIndex()) {
        case 0:

            if (toast != null)
                toast.cancel();

            toast = Toast.makeText(getActivity(), "All Other Year Defectors: " +e.getVal(), Toast.LENGTH_SHORT);

            view = toast.getView();
            view.setBackgroundResource(R.color.all_odr_yr);
            toast.setGravity(Gravity.TOP, 0, 950);
            toast.show();
            break;


        case 1:
            if (toast != null)
                toast.cancel();

            toast = Toast.makeText(getActivity(), "Last Year Defectors: " + e.getVal(), Toast.LENGTH_SHORT);

            view = toast.getView();
            view.setBackgroundResource(R.color.lst_yr_df);
            toast.setGravity(Gravity.TOP, 0, 950);
            toast.show();
            break;

2 个答案:

答案 0 :(得分:6)

单独使用图书馆似乎很困难而且难以实现。

但你可以做的是内联监听器并为每个图表使用一个单独的监听器,如下所示:

    countChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {

        @Override
        public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
            // COUNT CHART VALUE SELECTED
        }

        @Override
        public void onNothingSelected() { }
    });

    dollarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {

        @Override
        public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
            // DOLLAR CHART VALUE SELECTED
        }

        @Override
        public void onNothingSelected() { }
    });

通过这种方式,您可以在不同的图表之间区分

答案 1 :(得分:0)

如果您不想像Philip在答案中提到的那样使用内联侦听器,您可以创建一个实现onChartValueSelectedListener的类,并使用ID识别每个图表。

    private class CustomOnValueSelectedListener implements OnChartValueSelectedListener {

    private int CHART_ID;

    public CustomOnValueSelectedListener() {}

    public CustomOnValueSelectedListener(int chart_id) {
        CHART_ID = chart_id;
    }

    @Override
    public void onValueSelected(Entry e, Highlight h) {
        switch (CHART_ID) {
            case PIE_CHART_ID:
                break;
            case BAR_CHART_ID:
                break;
            case LINE_CHART_ID:
                break;
            default: 
                    //common code
                break;
        }
    }

    @Override
    public void onNothingSelected() {
    }
}

你现在可以这样做 -

pieChart.setOnChartValueSelectedListener(new CustomOnValueSelectedListener(PIE_ID));
barChart.setOnChartValueSelectedListener(new CustomOnValueSelectedListener(BAR_ID));
lineChart.setOnChartValueSelectedListener(new CustomOnValueSelectedListener(LINE_ID));


someOtherChart.setOnChartValueSelectedListener(new CustomValueSelectedListener());

其中PIE_IDLINE_IDBAR_ID是一些独特的整数。

这样,如果您有超过3-4个图表来处理其他内联侦听器更好,您的代码会很简洁。