ActionBar 中的两个片段 return 对 fragment.isVisible() 都是正确的
Both Fragment in ActionBar return true for fragment.isVisible()
在我的 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()
returns 这两个片段都是正确的。为什么会这样?我需要考虑另一个标志吗?
下面是我的 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;
}
}
您似乎正在使用 ViewPager,您需要找出哪个是当前选定的视图。在我看来,您的方法中的问题是 viewpager 保留了至少两个片段的实例。看起来你只有两个片段,这两个片段都由 viewpager 保存,这就是为什么你得到两个片段的 isVisible true 的原因。
如果您只需要在viewpager上获取当前选中的片段,请在viewpager中尝试此方法class:
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 post
在我的 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()
returns 这两个片段都是正确的。为什么会这样?我需要考虑另一个标志吗?
下面是我的 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;
}
}
您似乎正在使用 ViewPager,您需要找出哪个是当前选定的视图。在我看来,您的方法中的问题是 viewpager 保留了至少两个片段的实例。看起来你只有两个片段,这两个片段都由 viewpager 保存,这就是为什么你得到两个片段的 isVisible true 的原因。
如果您只需要在viewpager上获取当前选中的片段,请在viewpager中尝试此方法class:
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 post