【问题标题】:Get which chart is selected on activity获取在活动中选择了哪个图表
【发布时间】:2015-03-12 10:59:52
【问题描述】:

我正在使用最新版本的 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;

【问题讨论】:

  • 这是 mpandroidchart 的一大缺失

标签: android mpandroidchart


【解决方案1】:

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

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

    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 感谢您的出色工作。我正在使用最新的库版本。我需要突出基于触摸的特定值。为此,在 onValueSelected 中应该做什么。我需要像使用 setDrawValues 一样突出显示值。希望你能理解。
  • @Philipp Jahoda
【解决方案2】:

如果您不想像 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 个图表要处理,这样你的代码会很简洁,否则内联侦听器会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多