Так что я пытаюсь использовать ReciclerView, чтобы показать 2+ графиков, используя разные данные каждый.Я уже пробовал несколько обходных путей и позиционировал код во многих частях кода, но я не могу заставить его работать.
Я думаю, что это проблема с моим адаптером, или, может быть, я неправильно называю данные или, может быть,Я пропускаю какой-то цикл «Для», чтобы перебрать данные каждой диаграммы, можете ли вы дать мне какой-нибудь совет?
Я использую библиотеку MPAndroidChart для диаграмм, но процесс аналогичен использованию нативнойдиаграмма, я полагаю
Вот мой код:
Основной класс
public class atleta_estadisticas extends Fragment {
public ArrayList<lista_estadisticas> lista_est;
public RecyclerView rcc_lista_estadisticas;
public lista_estadisticas_adaptador adaptador_lista_estadisticas;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_atleta_estadisticas, container, false);
rcc_lista_estadisticas = (RecyclerView)view.findViewById(R.id.rcc_atletas_estadisticas);
LinearLayoutManager linear = new LinearLayoutManager(this.getActivity());
linear.setOrientation(LinearLayoutManager.VERTICAL);
rcc_lista_estadisticas.setLayoutManager(linear);
data(); //set all data
iniciar_adaptador_estadisticas();
return view;
}
public void data(){
lista_est = new ArrayList<>();
//First graphic
lista_est.add(new lista_estadisticas("R1",0,40));
lista_est.add(new lista_estadisticas("R2",1,40));
lista_est.add(new lista_estadisticas("R3",2,30));
lista_est.add(new lista_estadisticas("R4",3,50));
lista_est.add(new lista_estadisticas("R5",4,70));
lista_est.add(new lista_estadisticas("R6",5,30));
//Second graphic
lista_est.add(new lista_estadisticas("Q1",0,50));
lista_est.add(new lista_estadisticas("Q2",1,30));
lista_est.add(new lista_estadisticas("Q3",2,20));
lista_est.add(new lista_estadisticas("Q4",3,70));
lista_est.add(new lista_estadisticas("Q5",4,50));
lista_est.add(new lista_estadisticas("Q6",5,40));
}
Конструктор с геттером и сеттером
public class lista_estadisticas {
private String competencia_Nombre;
private float competencia_Index;
private float puntuacion;
//Constructor
public lista_estadisticas(String competencia_Nombre, float competencia_Index, float puntuacion) {
this.competencia_Nombre = competencia_Nombre;
this.competencia_Index = competencia_Index;
this.puntuacion = puntuacion;
}
public String getCompetencia_Nombre() {
return competencia_Nombre;
}
public void setCompetencia_Nombre(String competencia_Nombre) {
this.competencia_Nombre = competencia_Nombre;
}
public float getCompetencia_Index() {
return competencia_Index;
}
public void setCompetencia_Index(float competencia_Index) {
this.competencia_Index = competencia_Index;
}
public float getPuntuacion() {
return puntuacion;
}
public void setPuntuacion(float puntuacion) {
this.puntuacion = puntuacion;
} }
Адаптер
public class lista_estadisticas_adaptador extends RecyclerView.Adapter<lista_estadisticas_adaptador.Lista_Estadisticas_ViewHolder>{
private LineChart estadisticas_chart;
ArrayList<Entry> puntuaciones1 = new ArrayList<>();
// Nombre de clase de Java
private ArrayList<lista_estadisticas> estadisticas_lista;
public lista_estadisticas_adaptador(ArrayList<lista_estadisticas> estadisticas_lista ){
this.estadisticas_lista = estadisticas_lista;
}
@NonNull
@Override
public Lista_Estadisticas_ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rv_atletas_estadisticas,viewGroup,false);
return new Lista_Estadisticas_ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull Lista_Estadisticas_ViewHolder Lista_Estadisticas_ViewHolder, int i) {
lista_estadisticas lista = estadisticas_lista.get(i);
Set_ChartValues(lista);
}
@Override
public int getItemCount() {
return estadisticas_lista.size();
}
public class Lista_Estadisticas_ViewHolder extends RecyclerView.ViewHolder{
public Lista_Estadisticas_ViewHolder(View itemView){
super(itemView);
estadisticas_chart = (LineChart)itemView.findViewById(R.id.chart_atleta_estadisticas);
TextView tv_rank = (TextView)itemView.findViewById(R.id.tv_Ranking);
LineDataSet set1 = new LineDataSet(puntuaciones1, "Puntuacion 1");
List<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
dataSets.add(set1);
LineData data = new LineData(dataSets);
estadisticas_chart.setData(data);
estadisticas_chart.invalidate(); // refresh
}
}
public void Set_ChartValues(lista_estadisticas lst){
puntuaciones1.add(new Entry(lst.getCompetencia_Index(),lst.getPuntuacion())); //Here's where I set the chart values
}
}
Если я делаю это таким образом, я получаю ошибку java.lang.NegativeArraySizeException: -10
Потому что, когда процесс достигает новых данных диаграммы, он имеет новый индексот 0 до начала заполнения 2-го рисунка, здесь * в основном классе
lista_est.add(new lista_estadisticas("R6",5,30));
//Second chart
lista_est.add(new lista_estadisticas("Q1",0,50)); // New index, because is a new chart
И даже если я загружаю только 1 график, он отображает данные в инкрементном порядке, что означает, что каждый график добавляет другое значение каждыйодин.Вот так
Инкрементальные значения в диаграммах (я не могу напрямую загрузить изображение из-за моего уровня, извините)
Но если я установлю свои данные здесь вручную
public void Set_ChartValues(){
puntuaciones1 = new ArrayList<>();
puntuaciones1.add(new Entry(0,20f));
puntuaciones1.add(new Entry(1,30f));
puntuaciones1.add(new Entry(2,50f));
puntuaciones1.add(new Entry(3,20f));
puntuaciones1.add(new Entry(4,75f));
puntuaciones1.add(new Entry(5,43f));
}
И поэтому некоторые корректировки в коде, потому что если нет, я получаю несколько ошибок
.
public class Lista_Estadisticas_ViewHolder extends RecyclerView.ViewHolder{
public Lista_Estadisticas_ViewHolder(View itemView){
super(itemView);
Set_ChartValues(); ...
Отображает график, но только с теми же данными на каждом графике
Одинаковые данные на каждом графике
И это не то, что я ищу, я смотрю, чтобы показатьдиаграммы с их собственными значениями
Любая помощь будет признательна Спасибо