在我的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;
}
}
答案 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帖子。