获取在 activity 上选择了哪个图表

Get which chart is selected on activity

我正在使用最新版本的 mpandroidchart 库。我在单个 activity 上有 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;

这似乎很难,仅靠图书馆很难实现。

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

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

这样您就可以区分不同的图表。

如果您不想像 Philip 在他的回答中提到的那样使用内联监听器,您可以创建一个 class 实现 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 个图表来处理,那么您的代码会很简洁,否则内联侦听器会更好。