0

У меня есть следующий код, чтобы создать ViewPager с фрагментами:Restart/обновить onCreateView когда ViewPager показан фрагмент

// Create tabs for viewpager 
    FragmentPagerItemAdapter adapter = new FragmentPagerItemAdapter(
      getSupportFragmentManager(), FragmentPagerItems.with(this) 
      .add(R.string.tab_stuff, Stuff.class) 
      .add(R.string.tab_profile, Profile.class) 
      .create()); 
// Give the viewpager an adapter 
    viewPager = (ViewPager) findViewById(R.id.view_pager); 
    viewPager.setAdapter(adapter); 

Я также дать пользователю возможность изменить текущую страницу на ViewPager с меню на ящик:

// Navigation view listener 
    navigationView.setNavigationItemSelectedListener(new NavigationView 
      .OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      item.setChecked(true); 
      switch (item.getItemId()) { 

       // Item: shows stuff and then closes the drawer 
       case R.id.navdrawer_stuff: 

        viewPager.setCurrentItem(0); 
        drawerLayout.closeDrawers(); 
        return true; 

в Трикси вещи приходит, когда присоединен фрагмент и по методу OnCreateView происходит это:

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
         @Nullable Bundle savedInstanceState) { 

    // Check if user is logged in and subbed 
    logged = Prefs.getBoolean(LOGGED, false); 
    subbed = Prefs.getBoolean(SUB, false); 
    meal = Prefs.getBoolean(DAY_DIET, false); 
    email = Prefs.getString(USERMAIL, ""); 

    // If user is logged and subbed 
    if (logged && subbed) { 
     // Inflate the proper layout 
     View view = inflater.inflate(
       R.layout.diets_user_subbed, 
       container, 
       false 
     ); 
     try { 
      currentDayMeal(email); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     checkMealsListener(view); 
     return view; 
    } else if (logged) { 
     View view = inflater.inflate(
       R.layout.no_sub, 
       container, 
       false 
     ); 
     return view; 
    } else { 
     View view = inflater.inflate(
       R.layout.no_sub_no_reg, 
       container, 
       false 
     ); 
     return view; 
    } 
} 

Теперь все это работает как шарм, пока я не изменю значения logged или subbed, и OnCreateView больше не проверяет, какой макет загружается. Он работает, если я закрываю приложение и перезапускаю его, но как только он откроется, он не будет повторно проверен.

Любые идеи? Благодарю.

ответ

0
  1. Создайте в своем методе Фрагмент, чтобы изменить свой макет. То есть он должен удалить/добавить некоторые виды из корневого макета, которые вы можете получить на Fragment#getView().
  2. Сделать фрагмент для реагирования при изменении настроек. Для этого добавьте onSharedPreferenceChanged. В ней вызывается метод фрагменты из 1.

    public class FragmentsClassName extends Fragment implements SharedPreferences.OnSharedPreferenceChangeListener 
    { 
    
        @Override 
        public void onCreate(Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         .... 
         PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this); 
        } 
    
        @Override 
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        { 
         View v = inflater.inflate(R.layout.fragment_recycler_in_swipe, container, false); 
         update(v); 
         return v; 
        } 
    
        private void update(View v) 
        { 
         //TODO update layout here 
        } 
    
        @Override 
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
        { 
         Log.i("log", "onSharedPreferenceChanged with key: " + key); 
         if (!isAdded()) 
         { 
          return; 
         } 
         update(getView()); 
        } 
    } 
    
+0

Извините, но не могли бы вы дать мне пример? –

+0

Я попробую это, спасибо. –

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