托管ViewPager活动上的片段生命周期

时间:2015-07-15 15:01:37

标签: android android-fragments android-viewpager lifecycle

我通过ViewPager在托管它们的活动上有两个片段。 当我更新片段A的数据时,它不会显示在屏幕上。 所以我认为我应该使用生命周期...我将所有生命周期回调放置在定位中,当我滑过片段时没有调用。 当你在它们之间滑动时,片段是否会改变生命周期? 那么你如何刷新他们的内容呢?

我的代码作为例子:

片段b: 当单击一个按钮时,它需要更新片段A中的列表,片段应该显示它。

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];
    }
}

1 个答案:

答案 0 :(得分:0)

如果您正在寻找一种方法来了解您的片段在屏幕上何时可见/您可以将其添加到您的片段中:

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