ActionBar中的Fragment都为fragment.isVisible()返回true

时间:2016-07-31 07:04:49

标签: android android-fragments android-actionbar android-actionbar-compat

在我的MainActivity ActionBar我听DialogFragment的听众,并根据我ActionBar的片段,我需要做一些事情。

我使用下面的代码来获取当前片段并检查我所在的两个ActionBar片段中的哪一个:

 private Fragment getVisibleFragment() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    List<Fragment> fragments = fragmentManager.getFragments();
    if (fragments != null) {
        for (Fragment fragment : fragments) {
            if (fragment != null && fragment.isVisible())
                return fragment;
        }
    }
    return null;
}

fragment.isVisible()对两个片段都返回true。那为什么会这样?我还需要考虑另一面旗帜吗?

以下是我的FragmentPagerAdapter实施:

public class SectionsPagerAdapter extends FragmentPagerAdapter {
Context context;
public SectionsPagerAdapter(FragmentManager fm, Context context) {
    super(fm);
    this.context = context;
}

@Override
public Fragment getItem(int index) {
    switch (index) {
        case 0:
            return new ReceivedListFragment();
        case 1:
            return new SentListFragment();
    }
    return null;
}

@Override
public int getCount() {
    // Show 2 total pages.
    return 2;
}

@Override
public CharSequence getPageTitle(int position) {
    Locale l = Locale.getDefault();
    switch (position) {
        case 0:
            return context.getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return context.getString(R.string.title_section2).toUpperCase(l);
    }
    return null;
}
}

1 个答案:

答案 0 :(得分:1)

您似乎正在使用ViewPager,您需要找出当前所选视图。在我看来,你的方法中的问题是viewpager保留至少两个片段的实例。看来你只有两个片段,这两个片段都是由viewpager保存的,这就是为什么你让两个片段的 isVisible 为真。

如果您只需要在viewpager上获取当前选定的片段,请从viewpager类中尝试此方法:

mViewPagerInstance.getCurrentItem();

将为您提供当前选定的片段索引。

另一种方法是为viewpager添加 PageChangeListener ,然后收听页面更改事件:

class MyActivity extends Activity{
  private int curPage;

  private static class MFragChangeListener extends SimpleOnPageChangeListener{
        public void onPageSelected(int position) {
               curPage = position;
  }
} 

  ........... /* Rest of your code */

mViewPagerInstance.setOnPageChangeListener(new MFragChangeListener());
/* Now access curPage to get the current selected page index whenever you need it. */

请参阅this SO帖子。