Как отметил @daniel_s, проблема не в старших чартах.И это не проблема с firebase тоже.Это то, как вы поместили свой код.
Теперь я не тот человек, который может говорить что-либо о firebase, но давайте поймем это.Firebase работает по асинхронному механизму, и все методы firebase имеют асинхронный тип.Поэтому, когда вы нажимаете на Cardview, и метод firebase, и метод старшей диаграммы запускаются вместе, а не один за другим.
Чтобы сделать эту работу в соответствии с вашим способом, вы должны сделать что-то вроде этого:
holder.show_graph.setOnClickListener(v -> {
docRef.get().addOnSuccessListener(documentSnapshot -> {
mMarks = new HashSet<>();
if (documentSnapshot != null && documentSnapshot.exists()) {
Map<String, Object> hm = documentSnapshot.getData();
Set<String> a = hm.keySet();
for (String b : a) {
try {
holder.marks_obtained.setText((String)documentSnapshot.get(email));
if(!b.equals("Max_marks")){
Log.e( "onComplete: ", documentSnapshot.get(b+".com") + " " +documentSnapshot.getId() );
mMarks.add(Float.parseFloat((String)documentSnapshot.get(b+".com")));
}
} catch (Exception e) {
e.printStackTrace();
}
}
// All of your highcharts code here.....
v = LayoutInflater.from(context).inflate(R.layout.graph_plot,null);
final View alertLayout = v;
try{
//HICharts
HIChartView chartView = alertLayout.findViewById(R.id.hc);
chartView.plugins = new ArrayList<>(Arrays.asList("histogram-bellcurve"));
HIOptions options = new HIOptions();
HIChart chart = new HIChart();
chart.setType("variwide");
options.setChart(chart);
HITitle title = new HITitle();
title.setText("Score Division");
options.setTitle(title);
HIXAxis xaxis1 = new HIXAxis();
HITitle ht = new HITitle();
ht.setText("Count");
xaxis1.setTitle(ht);
HIXAxis xaxis2 = new HIXAxis();
xaxis2.setTitle(new HITitle());
xaxis2.setOpposite(true);
options.setXAxis(new ArrayList<>(Arrays.asList(xaxis1, xaxis2)));
HIYAxis yaxis1 = new HIYAxis();
HITitle ht2 = new HITitle();
ht2.setText("Marks");
yaxis1.setTitle(ht2);
HIYAxis yaxis2 = new HIYAxis();
yaxis2.setTitle(new HITitle());
yaxis2.setOpposite(true);
options.setYAxis(new ArrayList<>(Arrays.asList(yaxis1, yaxis2)));
HILegend legend = new HILegend();
legend.setEnabled(true);
options.setLegend(legend);
HIHistogram series1 = new HIHistogram();
series1.setType("histogram");
series1.setName("Histogram");
series1.setXAxis(1);
series1.setYAxis(1);
series1.setBaseSeries("s1");
series1.setZIndex(-1);
HIScatter series2 = new HIScatter();
series2.setType("scatter");
series2.setName("Data");
Number[] series2_data = new Number[mMarks.size()];
int i = 0;
for(float m : mMarks){
series2_data[i] = m;
i++;
}
series2.setId("s1");
series2.setData(new ArrayList<>(Arrays.asList(series2_data)));
series2.setMarker(new HIMarker());
series2.getMarker().setRadius(2.5);
options.setSeries(new ArrayList<>(Arrays.asList(series1, series2)));
options.setExporting(new HIExporting());
options.getExporting().setEnabled(false);
chartView.setOptions(options);
AlertDialog.Builder alertBox = new AlertDialog.Builder(v.getRootView().getContext());
alertBox.setTitle("Graph");
alertBox.setView(alertLayout);
alertBox.setCancelable(false);
alertBox.setPositiveButton("Done", (dialog, which) -> dialog.dismiss());
AlertDialog dialog = alertBox.create();
dialog.show();
}
catch (NullPointerException e){
Log.e("",e.getLocalizedMessage());
}
finally {
if(mMarks != null){
mMarks.clear();
}
}
}
});
Надеюсь, мне было ясно.Если это сработало, то примите мой ответ, нажав на галочку:)