检查片段当前是否可见或不可见 [英] Check if fragment is currently visible or no
问题描述
我知道 StackOverflow 中有很多类似的问题,但我的问题几乎没有什么不同.
我有嵌套的 Fragment 层次结构,如下所示:
活动||片段|(ViewPager)||||BFragment BFragment .....|(ViewPager)||||CFragment CFragment ...|(ViewPager)||||DFragment DFragment ...
现在我想知道 DFragment
是否显示给用户?
我尝试了 StackOverflow 的很多解决方案,但都没有成功.
我尝试的是:
我尝试了 setUserVisibleHint()
但它返回 true
用于上述层次结构中的多个 DFragment
,这是 ViewPager的原因代码>
我也从这些链接中尝试过:link1, link2,link3 等等......但没有得到实际解决方案.
等待帮助.谢谢.
更新
适配器类
class ViewPagerAdapter 扩展 FragmentPagerAdapter {私人最终列表<片段>mFragmentList = new ArrayList<>();私有最终列表mFragmentTitleList = new ArrayList<>();公共 ViewPagerAdapter(FragmentManager 管理器){超级(经理);}@覆盖公共片段 getItem(int position) {返回 mFragmentList.get(position);}@覆盖公共 int getCount() {返回 mFragmentList.size();}public void addFragment(Fragment fragment, String title) {mFragmentList.add(fragment);mFragmentTitleList.add(title);}@覆盖公共 CharSequence getPageTitle(int position) {返回 mFragmentTitleList.get(position);}}
您可以检查,在设备屏幕上是否可以看到被膨胀的 View
片段:
如果视图的一部分在根级别可见,getGlobalVisibleRect()
将返回 true
.
I know there are lots of similar questions in StackOverflow but my question is little different.
I have nested hierarchy of Fragments like in below structure:
Activity
|
|
AFragment
|
(ViewPager)
| |
| |
BFragment BFragment .....
|
(ViewPager)
| |
| |
CFragment CFragment ...
|
(ViewPager)
| |
| |
DFragment DFragment ...
Now i want to know that whether DFragment
is showing to user or not?
I tried lots of solution from StackOverflow but couldn't get sucess.
What i tried is:
I tried setUserVisibleHint()
but it returns true
for multiple DFragment
in above hierarchy which is a cause of ViewPager
I also tried from these links: link1, link2, link3 and so on... but did not got actual solution.
Waiting for help. Thank you.
UPDATE
Adapter Class
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
You can check, whether the View
that fragment inflated is visible on the device's screen:
Fragment fragment = ... // retrieve from `ViewPager`'s adapter.
View fragmentRootView = fragment.getView();
if (fragmentRootView != null && fragmentRootView.getGlobalVisibleRect(new Rect())) {
// fragment is visible
} else {
// fragment is not visible
}
getGlobalVisibleRect()
will return true
if part of the view is visible at the root level.
这篇关于检查片段当前是否可见或不可见的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!