Я в настоящее время переключаюсь между 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);
}
}
}
});
}