0

Как YouTube обрабатывает жизненный цикл фрагментов своих вкладок? Когда я нажимаю на вкладку, она запускается и продолжает загрузку данных, даже если я переключил эту вкладку. И когда я снова забираю эту вкладку, она не перезагружает его представление и данные. Я думаю, что есть некоторые логические переменные, такие как didFeedLoad, которые затем устанавливаются в onCreate? Но, на мой взгляд, это не изящное и хорошее решение. Что ты думаешь?Как справляться с жизненным циклом Android так же, как в приложении YouTube?

В моем приложении вместо ViewPager и TabLayout меня BottomNavigationView, но я хочу, чтобы справиться с жизненным циклом, как в YouTube Android App

Вот код навигации:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.frame_layout, new OneFragment()); 
fragmentTransaction.commit(); 
BottomNavigationView bottomNavigationView = 
      (BottomNavigationView) findViewById(R.id.bottom_navigation_view); 

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      Fragment fragment = null; 
      switch (item.getItemId()) { 
       case R.id.action_one: 
        fragment = new OneFragment(); 
        break; 
       case R.id.action_two: 
        fragment = new TwoFragment(); 
        break; 
       case R.id.action_three: 
        fragment = new ThreeFragment(); 
        break; 
       case R.id.action_four: 
        fragment = new FourFragment(); 
        break; 
       case R.id.action_five: 
        fragment = new FiveFragment(); 
        break; 
      } 
      if (fragment != null) { 
       FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.frame_layout, fragment); 
       fragmentTransaction.commit(); 
      } 
      return true; 
     } 
    }); 
+0

Можете ли вы поделиться кодом навигации и выбором вкладок. Поэтому я могу предложить –

+0

@UmarAta Я обновил вопрос – madim

ответ

0

Я подозреваю, что вкладка YouTube, фрагменты являются нормальными фрагментами. Когда вы переключаете вкладки, они могут быть (и, вероятно,) убиты. Они просто загружают данные в фоновом режиме (в основном виде деятельности/в разных потоках), а затем кэшируют/хранят эти данные локально, поэтому, когда вы снова переключаетесь на одну и ту же вкладку, она очень быстро извлекается с использованием сохраненных/кэшированных данных.

0

Что вы ищете является ViewPager .setOffscreenPageLimit (предел ИНТ)

Из Android Support Library (v4) Documentation:

Устанавливает количество страниц, которые следует сохранить в обе стороны от текущей страницы в иерархии представлений в состоянии ожидания. Страницы за пределами этого диапазона предел будет воссоздан из адаптера, если это необходимо.

Значение по умолчанию: 1

Если у вас есть 4 Вкладки, и вы хотите, чтобы они все не бездействовать и никогда не будут уничтожены & воссозданы (как приложение YouTube), вы можете установить предел до .

Принимая приложение YouTube в качестве прецедентного сценария (4 вкладки), я считаю, что его ViewPager было определено более или менее таким образом:

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); 
mViewPager.setOffscreenPageLimit(3); 

Edit: Что касается BottomNavigationView - до тех пор, как вы связать его с ViewPager, не имеет значения, используете ли вы эту или TabLayout. Но после второго чтения я понимаю, что вы вообще не используете ViewPager, поэтому я хотел бы знать, что вы используете, чтобы моя помощь могла быть завершена.

(кроме того, почему бы не использовать ViewPager? идеальное решение)

+0

Я не хочу, чтобы поведение swiping, и я также не хочу загружать данные для других вкладок. Я хочу, чтобы сделать запрос api один раз, когда табуляция выбрана и видима, и не загружать другие данные вкладки. Если пользователь выбирает другую вкладку, и данные не загружаются для предыдущего запроса о прекращении табуляции, и если пользователь снова повторно выбирает эту вкладку, фрагмент должен знать, загружены ли данные для этой вкладки или нет. – madim

+0

Вы можете отменить поведение swiping в ViewPager, создав один из своих (ссылка ниже - отличный пример). О загрузке данных других вкладок - вы можете переопределить.setUserVisibleHint внутри вашего фрагмента, который будет возникать при изменении видимости фрагмента для пользователя (ссылка № 2 ниже). Вы также можете использовать это для остановки предыдущих запросов вкладок. http://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be-able-to-s http://stackoverflow.com/questions/36353560/stop-android-tablayout-loading-next-page-automatically – Barackos

 Смежные вопросы

  • Нет связанных вопросов^_^