4

我正在使用最新版本的 mpandroidchart 库。我有 2 个关于单个活动的条形图。chart1 & chart2 是 XML 中的 id(我不想使用条形图列表视图)。chart1 cosnist 计数值 & 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;
4

2 回答 2

7

仅靠图书馆似乎很难做到这一点。

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

    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() { }
    });

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

于 2015-03-12T14:52:46.603 回答
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_ID,LINE_IDBAR_ID是一些唯一的整数。

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

于 2017-03-25T16:38:17.867 回答