检查片段当前是否可见或不可见

7 浏览
0 Comments

检查片段当前是否可见或不可见

我知道在StackOverflow上有很多类似的问题,但我的问题略有不同。

我有一个嵌套的Fragment层次结构,如下所示:

现在我想知道DFragment是否对用户可见?

我尝试了很多StackOverflow上的解决方案,但没有成功。

我尝试了setUserVisibleHint(),但它对上面层次结构中的多个DFragment都返回true,这是ViewPager的原因。

我还尝试了这些链接:link1link2link3等等...但没有得到实际的解决方案。

等待帮助。谢谢。

更新

适配器类:

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List mFragmentList = new ArrayList<>();
    private final List 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);
    }
}

0
0 Comments

问题原因:需要判断一个fragment是否当前可见,以便在可见时执行相应的操作。

解决方法:使用isVisible()方法进行额外的可见性检查。

整理成的文章如下:

给这个方法一个尝试...

isVisible()方法可以额外增加一层可见性检查。

以下是一个示例代码:

ViewPager viewPager=(ViewPager)findViewById(R.id.view_pager);
final Fragment[] fragments={new DFragment(),new MyFragment()};  //添加所有其他在view pager中的fragment对象......
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }
    public void onPageSelected(int position) {
        if(fragments[position].isVisible()){
            //在fragment可见时执行的操作
        }
    }
    public void onPageScrollStateChanged(int state) {
    }
});

0
0 Comments

问题的原因是要判断一个fragment是否当前可见,根据给出的代码,可以通过获取fragment的根视图,然后调用getGlobalVisibleRect()方法来判断视图是否可见。如果视图可见,返回true,否则返回false。但是根据其他人的经验,这种解决方法可能不适用于所有情况,可以尝试使用userVisibleHint属性来判断fragment的可见性。另外,对于在ViewPager中的fragment,可以将getGlobalVisibleRect()方法包装在一个post runnable中来实现更好的效果。

解决方法如下:

1. 获取fragment的根视图:View fragmentRootView = fragment.getView();

2. 判断视图是否可见:

- 如果fragmentRootView不为空且调用fragmentRootView.getGlobalVisibleRect(new Rect())返回true,则表示fragment可见。

- 否则,表示fragment不可见。

另外,可以尝试使用userVisibleHint属性来判断fragment的可见性,该属性可以通过fragment的setUserVisibleHint()方法来设置。

对于在ViewPager中的fragment,可以将getGlobalVisibleRect()方法包装在一个post runnable中来实现更好的效果,代码如下:

    fragmentRootView.post(new Runnable() { 
        public void run() { 
            fragmentRootView.getGlobalVisibleRect(new Rect());
        }
    });

这样可以更准确地判断fragment在ViewPager中的可见性。

0
0 Comments

问题原因:需要判断一个片段是否当前可见。

解决方法:使用setMenuVisibility()方法来判断片段的可见性。

上面的代码中,通过重写setMenuVisibility()方法来判断片段的可见性。当visible参数为true时,表示片段当前可见;当visible参数为false时,表示片段当前不可见。可以在if语句中执行当前可见时的操作,在else语句中执行当前不可见时的操作。通过这种方式,可以根据片段的可见性来进行相应的处理。

0