2015-07-15 2 views
1

У меня есть два фрагмента при размещении на них ViewPager. Когда я обновляю данные Fragment A, он не отображается. Итак, я решил, что должен играть с жизненным циклом ... Я размещал локации во всех обратных вызовах жизненного цикла, и никто не вызывался, когда я скользил по фрагментам. Разве фрагменты не изменяются, хотя жизненный цикл при скольжении между ними? Итак, как вы обновляете свой контент?Жизненный цикл фрагментов на хостинге ViewPager activity

мой код как exmaple:

фрагмент б: при нажатии кнопки он должен обновить список в фрагменте А и фрагмент должен отобразить его.

private RemoveFromHistoryInterface removeFromHistory = new RemoveFromHistoryInterface() 
{ 
    @Override 
    public void removeFromHistory(List<Password> passwordsToRemove) 
    { 
     PagerActivity.removeFromHistory(passwordsToRemove); 
    } 
}; 

public interface RemoveFromHistoryInterface 
{ 
    public void removeFromHistory(List<Password> passwordsToRemove ); 
} 
... 
... 

removeFromHistory.removeFromHistory(listToRemove); 

Пейджер активность (которая принимает оба фрагмента)

public static void removeFromHistory(List<Password> passwordsToRemove) 
    { 
     MainFragment.fromHistoryToMain(passwordsToRemove); 
    } 

Фрагмент A:

@

Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     passwords = PasswordManager.getInstance().getPasswords(); 
     passwordsList = Password.getPasswordsList(); 
    } 
... 
... 
    public static void fromHistoryToMain(List<Password> listBackToMain) 
     { 
      passwordsList.addAll(0, listBackToMain); 
     } 

ViewPager адаптер:

public class ViewPagerAdapter extends FragmentPagerAdapter 
    { 

    final int PAGE_COUNT = 2; 
    private String tabTitles[] = new String[] { "Main", "History" }; 

    public ViewPagerAdapter(FragmentManager fragmentManager) 
    { 
     super(fragmentManager); 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 

    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position) 
     { 
      case 0: 
       return new MainFragment(); 

      case 1: 
       return new HistoryFragment(); 
      } 
     return null; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) 
    { 
     return tabTitles[position]; 
    } 
} 
+0

Вставьте свой код – EE66

+0

Это зависит от того, как вы заполняете фрагменты ViewPager - например, курсором ... –

+0

отредактировал сообщение с инструкциями моего кода .. Я не использую курсор. Каковы мои варианты сейчас? – BVtp

ответ

0

Если вы ищете способ, чтобы знать, когда ваш фрагмент становится видимым/на экране вы можете добавить это в ваш фрагмент:

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) 
    { do_your_stuff } 
    else { } 
    } 
+0

nope .. Мне просто нужно обновить отображаемые данные. Еще один способ вызвать onCreateCiew ... возможно ли это? Данные в этом фрагменте обновляются, но не отображаются в виджетах textview. – BVtp

0

Если вы хотите, чтобы воссоздать ваши фрагменты каждый раз, когда вы прокручивать ваш ViewPager, вы может вызвать setOffscreenPageLimit(0) экземпляр ViewPager.

Это позволит вашему ViewPager полностью воссоздать фрагменты на каждой странице.

Это может привести к некоторым недостаткам производительности, поскольку фрагменты будут воссозданы во время салфетки.