我有一个HorizontalScrollView
内心ViewPager
.我requestDisallowInterceptTouchEvent(true);
为此设定
了HorizontalScrollView
但ViewPager
仍有时会拦截触摸事件.是否有另一个命令我可以用来阻止View的父级和祖先拦截触摸事件?
注意:HorizontalScrollView
只占屏幕的一半.
我正在设计一个允许用户在ViewPager中的多个页面之间切换的应用程序.我一直在努力弄清楚如何在屏幕上不再可见的情况下从页面中删除Fragment实例,将其缓存(比如说,HashMap),然后将其恢复以便在用户使用时翻转到该页面,视图和其中的所有内容将处于删除之前的状态.例如,我的第一个页面是一个登录屏幕,它使成功登录时该特定页面上的某些布局元素可见/不可见.当我向前翻页足够的页面然后翻到第一页时,布局就会重置.这对于我的另一个页面来说更成为一个问题,它包含一个巨大的水平/垂直滚动数据网格,我在后台使用一个线程在初始化时绘制.我使用进度对话框来通知用户加载进度,每次我必须加载它时都会变得非常烦人.
所以我做了一些研究......
我浏览了FragmentStatePageAdapter的源代码,并在destroyItem()回调中,删除的Fragment实例的状态保存到ArrayList.当在instantiateItem()回调中创建Fragment的新实例时,如果项目的实例尚不存在(它们通过使用ArrayList跟踪它),则会创建一个新的Fragment实例并保存其状态使用相应的Fragment.SavedState数据初始化.不幸的是,这个数据不包括视图所在的状态,虽然我注意到对于带有GridView/ListView的页面,视图的状态以某种方式被恢复(如果我滚动到某个随机位置,翻了几页然后回来,它不会被重置).
根据API:
保存的状态不能包含对其他片段的依赖性 - 也就是说它不能使用putFragment(Bundle,String,Fragment)来存储片段引用,因为该引用在以后使用此保存状态时可能无效.同样,Fragment的目标和结果代码不包含在此状态中.
作为Android的菜鸟,我不太清楚我理解最后的陈述.
话虽如此,有没有办法缓存View状态?如果没有,我想我会继续将所有片段页留在内存中.
ScrollView滚动的视图是否由绘图缓存自动缓存?我不太确定我理解API文档.