Круговая диаграмма MPAndroidChart Пользовательские легенды отображаются некорректно - PullRequest
0 голосов
/ 01 ноября 2018

Я создал круговую диаграмму, используя MpAndroidChart, и данные извлекаются из firebase. Мне нужно отображать пользовательские легенды, но отображается только один элемент, но pieChart имеет более 5 элементов. Поскольку getColor () и getLabels () устарели, и я использовал этот код для получения цвета и метки круговой диаграммы

listdataref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) {
                Log.d("TAG", "IF else");
                /* new homePieTask().execute(dataSnapshot);*/

                ArrayList<PieEntry> entries = new ArrayList<>();

                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    int total = ds.child("total").getValue(Integer.class);
                    String name = ds.child("expensesName").getValue(String.class);
                    entries.add(new PieEntry(total, name));


                }

                pieDataSet = new PieDataSet(entries,"Expense By Dates");
                pieData= new PieData(pieDataSet);
                homepiechart.setData(pieData);
                pieDataSet.setColors(color);
                Legend legend = homepiechart.getLegend();
                legend.setEnabled(false);
                int colorCodes[] = getColors(legend);
                String labels[] = getLabels(legend);
                for (int i = 0; i < getColors(legend).length -1; i++) {
                    LinearLayout.LayoutParams parms_legen_layout = new LinearLayout.LayoutParams(
                            20, 20);
                    parms_legen_layout.setMargins(0, 0, 20, 0);
                    LinearLayout legend_layout = new LinearLayout(context);
                    legend_layout.setLayoutParams(parms_legen_layout);
                    legend_layout.setOrientation(LinearLayout.HORIZONTAL);
                    legend_layout.setBackgroundColor(colorCodes[i]);
                    relativeLayout.addView(legend_layout);

                    TextView txt_unit = new TextView(context);
                    txt_unit.setText(labels[i]);
                    relativeLayout.addView(txt_unit);
                }

1 Ответ

0 голосов
/ 03 ноября 2018

Наконец я сделал это с помощью следующего кода, и я не знаю, это лучший метод или нет, но все же он работает хорошо

 listdataref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                Log.d("Grid","On");
                List<String> labelsList=new ArrayList<>();
                if (getActivity() != null) {

                        Log.d("Grid", "OnOn");
                        for(int i=0;i< dataSnapshot.getChildrenCount();i++) {
                            for(DataSnapshot ds:dataSnapshot.getChildren()) {

                                String label = ds.child("expensesName").getValue(String.class);

                            labelsList.add(label);
                                List<Integer> intList = new ArrayList<Integer>();
                                for (int j : color)
                                {
                                    intList.add(j);
                                }


                                aClass = new LegendsClass(intList.get(i), labelsList.get(i));

                        }

                            legendsClasses.add(aClass);
                            gridViewAdapter = new GridViewAdapter(getActivity(), legendsClasses);
                            gridView.setAdapter(gridViewAdapter);
                            gridViewAdapter.notifyDataSetChanged();



                        Log.d("Grid", "After");
                    }


                }
                }else
            {
                Log.d("Grid","else");
                gridView.setVisibility(View.INVISIBLE);
            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
...