@Chesterfield25

Как сделать авто переключение фрагментов?

Суть задачи такова у меня есть несколько фрагментов, в случае бездействия пользователя в течении 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); // Очистить все предыдущие колбэки при уничтожении активности
    }
}
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы