gpt4 book ai didi

android - 根据一天中的时间更改 fragment 的内容

转载 作者:行者123 更新时间:2023-11-29 19:10:38 24 4
gpt4 key购买 nike

我有一个场景,我有一个带有 6 个 FragmentsViewPager

我想在早上显示前 3 个 Fragments,即从 0:00AM 到 11:59AM 在 ViewPager 中显示。

我想在下午时间显示接下来的 3 个 Fragments,即从 12:00PM 到 23:59PM

目前我正在检查 ActivityonResume() 中的时间并更新 ViewPager 的 Adapter

这是我的代码:

@Override
protected void onResume() {
super.onResume();
globalCalendar = Calendar.getInstance();
timeOfDay = globalCalendar.get(Calendar.HOUR_OF_DAY);

if (timeOfDay >= 0 && timeOfDay < 12) {
layout.setBackground(getResources().getDrawable(R.drawable.gradient_morning_background));
mSectionsPagerAdapter.notifyDataSetChanged();
mViewPager.destroyDrawingCache();
} else {
layout.setBackground(getResources().getDrawable(R.drawable.gradient_background));
mSectionsPagerAdapter.notifyDataSetChanged();
mViewPager.destroyDrawingCache();
}
}

我的实现有 2 个问题:

  1. 如果应用程序在上午 11:59 打开并且在前台运行直到12:00PM ViewPager 不会更新。

  2. 如果我接受申请 ViewPager's Adapter 的背景正在刷新 每次。

如何在用户打开应用程序时更新一次 ViewPager 并加载相关的 Fragments

最佳答案

根据您的要求,当您进入后台并进入前台时,您的应用可以完美运行。

所以问题是前台senario,所以我们可以使用Handler。

我只是在这里给出提示,如果你这样做,它会很好地工作。

private int mSession = -1;

private Handler mHandler = new Handler();

@Override
protected void onResume() {
super.onResume();

update();

Calendar calendar = Calendar.getInstance();

int hours = calendar.get(Calendar.HOUR_OF_DAY);
int min = calendar.get(Calendar.MINUTE);

if (((hours == 11) || (hours == 23)) && min > 45) {
// this is just we are starting if the current time is 11: 45 or 23:45 or more
// We ar beliving that user may be in this screen max 15 mins
int currentSecond = calendar.get(Calendar.SECOND);

mHandler.postDelayed(mRunnable, (60 - currentSecond) * 1000);
}
}

private Runnable mRunnable = new Runnable() {
@Override
public void run() {
update();

mHandler.postDelayed(this, 60 * 1000);
}
};

private void update() {
globalCalendar = Calendar.getInstance();
timeOfDay = globalCalendar.get(Calendar.HOUR_OF_DAY);

if (timeOfDay >= 0 && timeOfDay < 12) {

if (mSession != 1) {
updateFirstHalf();
}
mSession = 1;
} else {

if (mSession != 2) {
updateSecondHalf();
}
mSession = 2;
}
}

@Override
public void onPause() {
super.onPause();

mHandler.removeCallbacks(mRunnable);
}

private void updateFirstHalf() {
layout.setBackground(getResources().getDrawable(R.drawable.gradient_morning_background));
mSectionsPagerAdapter.notifyDataSetChanged();
mViewPager.destroyDrawingCache();
}

private void updateSecondHalf() {
layout.setBackground(getResources().getDrawable(R.drawable.gradient_background));
mSectionsPagerAdapter.notifyDataSetChanged();
mViewPager.destroyDrawingCache();
}

关于android - 根据一天中的时间更改 fragment 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45477571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com