Суть задачи такова у меня есть несколько фрагментов, в случае бездействия пользователя в течении 1 минуты фрагменты должны автоматически переключатся начиная
replaceFragment(new RulesFragment());
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
private FrameLayout frameLayout;
private Handler mHandler;
private final long IDLE_TIME = 10000; // 1 минута
private final long FRAGMENT_SWITCH_INTERVAL = 15000; // 15 секунд
private boolean isIdle = false;
private final Fragment[] fragments = {
new HomeFragment(),
new RulesFragment(),
new MusicFragment(),
new ReviewsFragment(),
new AdsFragment()
};
private int currentFragmentIndex = 0;
private final Runnable idleRunnable = new Runnable() {
@Override
public void run() {
isIdle = true;
currentFragmentIndex = 1; // Переключение на ReviewsFragment после бездействия
replaceFragment(fragments[currentFragmentIndex]);
// После этого, запускаем переключение фрагментов поочередно с интервалом
mHandler.postDelayed(fragmentSwitchRunnable, FRAGMENT_SWITCH_INTERVAL);
}
};
private final Runnable fragmentSwitchRunnable = new Runnable() {
@Override
public void run() {
currentFragmentIndex = (currentFragmentIndex + 1) % fragments.length;
replaceFragment(fragments[currentFragmentIndex]);
if (currentFragmentIndex == fragments.length - 1) {
currentFragmentIndex = 0; // Если достигнут последний фрагмент, переходим к первому
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottomNavigationView = findViewById(R.id.bottomNavigationView);
frameLayout = findViewById(R.id.frameLayout);
// Установка флагов для режима полноэкранного приложения, предотвращения выключения экрана и запрета сворачивания
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mHandler = new Handler();
replaceFragment(new HomeFragment());
bottomNavigationView.setOnItemSelectedListener(item -> {
mHandler.removeCallbacks(idleRunnable); // Удаляем предыдущий таймер бездействия
mHandler.postDelayed(idleRunnable, IDLE_TIME); // Запускаем новый таймер бездействия
if (item.getItemId() == R.id.home) {
currentFragmentIndex = 0;
} else if (item.getItemId() == R.id.rules) {
currentFragmentIndex = 1;
} else if (item.getItemId() == R.id.music) {
currentFragmentIndex = 2;
} else if (item.getItemId() == R.id.reviews) {
currentFragmentIndex = 3;
} else if (item.getItemId() == R.id.ads) {
currentFragmentIndex = 4;
}
Log.d("MainActivity", "Selected item: " + item.getItemId() + ", currentFragmentIndex: " + currentFragmentIndex);
replaceFragment(fragments[currentFragmentIndex]);
return true;
});
// Запуск таймера бездействия при запуске активности
mHandler.postDelayed(idleRunnable, IDLE_TIME);
}
private void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameLayout, fragment);
fragmentTransaction.commit();
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null); // Очистить все предыдущие колбэки при уничтожении активности
}
}