今天我正试图设置ViewPager.setOnPageChangeListener,我发现它已经被弃用了.
我在ViewPager中有三个页面(片段),但我只想显示其中两个页面的菜单项.
之前的SO答案中给出的代码似乎不起作用:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser == true) { }
else if (isVisibleToUser == false) { }
}
Run Code Online (Sandbox Code Playgroud)
Eclipse说不需要@Override,也不能设置super.它从未被系统调用,即使它是如何确定当前显示哪个页面?我可以帮忙吗?
我在我的ViewPager实例中使用的片段是非常耗费资源的,所以我只想一次加载一个.当我尝试以下内容时:
mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mPagerAdapter);
Run Code Online (Sandbox Code Playgroud)
我的FragmentStatePagerAdapter.getItem(int position)覆盖功能被调用3次,这是我打电话时发生的事情mViewPager.setOffscreenPageLimit(1).我希望它只被调用一次,因为我指定了0个屏幕外页面.
我相信我正在正确地呼唤一切,因为如果我打电话mViewPager.setOffscreenPageLimit(2),FragmentStatePagerAdapter.getItem(int position)就像我期望的那样被召唤5次.
ViewPager是否需要至少1个屏幕外页面,或者我在这里做错了什么?
我有一个ViewPager,每个页面都是一个Fragment视图.我想测试一个片段是否在可见区域.Fragment.isVisible只测试
ViewPager将创建3个(默认情况下)片段,并且所有三个片段都符合上述条件,但只有一个实际上对用户可见(人眼)
我一直看到我的ViewPager和我自己的FragmentStatePagerAdapter有一些奇怪的行为.
我的视图层次结构如下:
-> (1) Fragment root view (RelativeLayout)
-> (2) ViewPager
-> (3) ViewPager's current fragment view
Run Code Online (Sandbox Code Playgroud)
当负责片段根视图(1)的片段被隐藏(在片段事务中使用.hide())然后显示(使用.show())时,当前在ViewPager中显示的片段视图(3) )虽然片段仍然存在,但变为null.基本上,我的ViewPager变得完全空白/透明.
我找到解决这个问题的唯一方法是打电话
int current = myViewPager.getCurrentItem();
myViewPager.setAdapter(myAdapter);
myViewPager.setCurrentItem(current);
Run Code Online (Sandbox Code Playgroud)
显示父片段后.这会以某种方式触发视图重新创建并显示在屏幕上.不幸的是,这偶尔会导致异常处理寻呼机适配器unregisterDataSetObserver()在旧观察者上调用两次.
有一个更好的方法吗?我想我要问的是:
当隐藏ViewPager的父片段时,为什么我的ViewPager中的片段视图会被销毁?
更新:当应用程序"最小化"然后"恢复"(通过按下主页操作键然后返回)时,也会发生这种情况.
每个请求,这是我的寻呼机适配器类:
public class MyInfoSlidePagerAdapter extends FragmentStatePagerAdapter {
private ArrayList<MyInfo> infos = new ArrayList<MyInfo>();
public MyInfoSlidePagerAdapter (FragmentManager fm) {
super(fm);
}
public MyInfoSlidePagerAdapter (FragmentManager fm, MyInfo[] newInfos) {
super(fm);
setInfos(newInfos);
}
@Override
public int getItemPosition(Object object) {
int position = infos.indexOf(((MyInfoDetailsFragment)object).getMyInfo());
return position > 0 ? position : …Run Code Online (Sandbox Code Playgroud) 我在那里工作ViewPager和使用Fragment我找到了
在Fragment中的onCreateView()之前调用setUserVisibleHint()
我在Fragment支持库中使用android.support.v4.app.Fragment
这是图书馆的问题吗?
我怎么能摆脱它?
编辑
我重写setUserVisibleHint()而不是调用super来摆脱它.
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
//FIXED: setUserVisibleHint() called before onCreateView() in Fragment causes NullPointerException
//super.setUserVisibleHint(isVisibleToUser);
}
Run Code Online (Sandbox Code Playgroud) 将ViewPager与片段一起使用时,在选项卡之间移动时不会调用onPause(),onResume()方法.当我们被显示或被隐藏时,我们是否有任何方法可以在片段中找到答案?
不幸的是我在onResume(),onPause()中有逻辑,比如注册位置服务,在切换标签时永远不会停止,因为onPause()永远不会被调用,直到退出整个应用程序.
谢谢
我有一个ViewPager,一次加载三个页面.如果我从第1页到第2页再扫描到第3页,则第一页(片段)转到 onPause().然后,如果我滑动到第二页,onResume()即使页面1仍然对用户不可见,第一页也会出现.所以,我的问题是:如何区分代码中的第一页和第二页?例如,如果我必须在片段可见时运行一段代码,那么它是如何完成的?
android android-lifecycle android-fragments android-viewpager
FragmentStatePagerAdapter已从API 27中弃用。的替代方案是FragmentStatePagerAdapter什么?
private class MainPagerAdapter extends FragmentStatePagerAdapter {
MainPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment result = new DummyFragment();
return result;
}
@Override
public int getCount() {
return 5;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码显示FragmentStatePagerAdapter,getItem并super(fm);已弃用
只需知道实施Google分析的正确方法,即可实时跟踪用户何时处于片段中这就是现在所做的事情
@Override
public void onResume() {
super.onResume();
Tracker myTracker = parentActivity.getTracker();
myTracker.setCustomMetric(1, (long) 1);
myTracker.sendView("Music View");
}
Run Code Online (Sandbox Code Playgroud)
getTracker类在我的主要活动中,只返回主活动中的跟踪器实例
任何帮助将非常感激!