因此,我尝试使用ReciclerView显示2个以上使用不同数据的图表。我已经尝试过服务器工作环境,并将代码放置在代码的许多部分,但我无法使其正常工作。
我想我的适配器有问题,或者我以错误的方式调用数据,或者我缺少某种“ For”循环来遍历每个图表的数据,您能给我一些建议吗?
我正在将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));
}
具有getter和setter的构造器
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开始填充第二个图形,这里 *在主要班级
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
即使我只加载一张图表,它也会以增量方式显示数据,这意味着每个图表都将每个值相加。像这样
Incremental values in charts(抱歉,我无法直接上传图片)
但是,如果我在此处手动设置数据
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));
}
代码中的一些调整,因为如果没有,我会得到一些错误
设置puntuaciones1 = new ArrayList <>();在Set_ChartValues方法中,而不是在代码顶部
在ViewBoldViewHolder中插入的ViewHolder中调用方法
。
public class Lista_Estadisticas_ViewHolder extends RecyclerView.ViewHolder{
public Lista_Estadisticas_ViewHolder(View itemView){
super(itemView);
Set_ChartValues(); ...
它显示图表,但每个图表中仅包含相同的数据
这不是我想要的,我希望显示具有自己值的图表
任何帮助将不胜感激 谢谢