获取在 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_ID
、LINE_ID
和 BAR_ID
是一些唯一的整数。
如果您有超过 3-4 个图表来处理,那么您的代码会很简洁,否则内联侦听器会更好。
我正在使用最新版本的 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_ID
、LINE_ID
和 BAR_ID
是一些唯一的整数。
如果您有超过 3-4 个图表来处理,那么您的代码会很简洁,否则内联侦听器会更好。