Перезагрузить фрагмент и значения его графика при навигации по навигационной панели - PullRequest
0 голосов
/ 22 апреля 2020

Я в настоящее время переключаюсь между 3 фрагментами, и в домашнем фрагменте у меня есть диаграмма, которая иногда обновляется с информацией о базе огня. Весь код работает только с действиями, но я делаю изменения во фрагментах, и мой фрагментный код работает довольно хорошо, но когда я заменяю фрагмент, он не загружает значения в диаграмму большую часть времени. Я попытался добавить вместо замены, я попытался создать интерфейс, а также попытался вызвать метод populateChart (), который находится в HomeFragment в MainActivity, где мой фрагмент и код навигации.

Я просмотрел rnet для ответов, и, кажется, ничего не работает. Интересно, кто-нибудь может дать этому шанс! Если нет, то все хорошо, спасибо за просмотр.

Основная активность. java

ChipNavigationBar chipNavigationBar;
FragmentManager fragmentManager;

if (savedInstanceState == null) {
        chipNavigationBar.setItemSelected(R.id.home, true);
        fragmentManager = getSupportFragmentManager();
        HomeFragment homeFragment = new HomeFragment();
        fragmentManager.beginTransaction().replace(R.id.fragment_container, homeFragment).commit();
    }

    chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() {
        @Override
        public void onItemSelected(int i) {

            Fragment fragment = null;

            switch (i) {

                case R.id.education:

                    fragment = new EducationFragment();
                    break;

                case R.id.home:
                    fragment = new HomeFragment();
                    break;

                case R.id.diary:
                    fragment = new DiaryFragment();
                    break;

            }

            if (fragment != null) {


                fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).commit();

                Log.e("TAG", "Main Activity");
            } else {
                Log.e("TAG", "Error in creating fragment");
            }

        }
    });

PopulateChart () Этот код работает! Он вызывается каждый раз, когда я go возвращаюсь к домашнему фрагменту, и иногда диаграмма обновляется.

public void populateChart()
{
    documentReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    //Gets array from firestore and assign those values to userEmotions list.
                    totalSleep = (ArrayList<Number>) document.get("sleep");

                    final Cartesian cartesian = AnyChart.column();

                    List<DataEntry> data = new ArrayList<>();

                    for(int i = 0; i < totalSleep.size(); i++)
                    {
                        data.add(new ValueDataEntry(i, totalSleep.get(i).intValue()));
                    }

                    AnyChartView anyChartView = view.findViewById(R.id.any_chart_view);

                    Column column = cartesian.column(data);

                    column.tooltip()
                            .titleFormat("{%X}")
                            .position(Position.CENTER_BOTTOM)
                            .anchor(Anchor.CENTER_BOTTOM)
                            .offsetX(0d)
                            .offsetY(5d)
                            .format("${%Value}{groupsSeparator: }");

                    cartesian.animation(true);
                    cartesian.title("Total Sleep");

                    cartesian.yScale().minimum(0d);

                    //cartesian.yAxis(0).labels().format("${%Value}{groupsSeparator: }");

                    cartesian.tooltip().positionMode(TooltipPositionMode.POINT);
                    cartesian.interactivity().hoverMode(HoverMode.BY_X);

                    cartesian.xAxis(0).title("Day");
                    cartesian.yAxis(0).title("Sleep");

                    anyChartView.setChart(cartesian);

                    // Updates pie chart values with new values after a delete or add operation.
                    final int delayMillis = 500;
                    final Handler handler = new Handler();
                    final Runnable runnable = new Runnable() {
                        public void run() {
                            List<DataEntry> data = new ArrayList<>();
                            for(int i = 0; i < totalSleep.size(); i++)
                            {
                                data.add(new ValueDataEntry("Day " + (i+1), totalSleep.get(i).intValue()));
                            }
                            cartesian.data(data);

                            handler.postDelayed(this, delayMillis);
                        }
                    };
                    handler.postDelayed(runnable, delayMillis);

                }
            }
        }
    });
}
...