您的位置:首页 > 移动开发 > Android开发

fragment+scrollview 切换fragment自动滚动到顶部

2016-10-10 20:29 886 查看
项目中一个MainActivity 装载了四个Fragment 其中最后一个fragment中包含了一个ScrollView ,ScrollView中还包含了一个GridView(fragment的交替显示用的是隐藏/显示,而不是ViewPager装载fragment,要注意这一点哦)

我的目标是:1: fragment间来回切换时ScrollView自动滑到顶部

                     2: 从包含ScrollView的Fragment中跳转至其他Activity后,返回这个Fragment,fragemt依然自动滑到顶部

                     3: 即使手动将ScrollView滑动至中间部分,以上两条依然成立

解决方案:1,代码中:

设置ScrollView获取焦点:

scrollView.setFocusable(true);
scrollView.setFocusableInTouchMode(true);
ScrollView.requestFocus();


设置我的ScrollView中的GridView不获取焦点:

gridView.setFocusable(false);


设置ScrollView滑到顶部:

scrollView.fullScroll(ScrollView.FOCUS_UP);//这个是设置ScrollView滑动到顶部的一种方案
scrollView.scrollTo(0,0);//这是scrollView滑动到顶部的第二种方案
//这两种的区别就是当用户切换到包含ScrollView的fragment的时候
//第一种:ScrollView有一个滑动到顶部的动作(一个动画);
//第二种:看不到滑动的动作,直接看到的就是顶部


                    2,布局中:ScrollView的布局

android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"


                    为什么要在布局和代码中两次设置呢。双重保险嘛~~只在布局或者只在代码中设置有时就会有问题。。为什么我也不太懂(求大神指点)

经过这两方面的设置,依然不能每次都实现所有目标,从其他fragment切换回来还是不能自动置顶(好,重点来啦!!敲黑板儿!!)

思路: 1.fragmennt的生命周期;项目中并不是使用ViewPager装载Fragment,只是在底部画了四个布局,点击切换Fragment,我在包含ScrollView的fragment里面将Fragment的生命周期全都打印出来,发现并没有走,最后还是问了别人,知道了一个fragment的方法

@Override
public void onHiddenChanged(boolean hidd) {
if(!hidd){//当fragment从隐藏到出现的时候
scrollView.scrollTo(0,0);
}
}

//从Activity回到包含ScrollView的fragment
//fragment的生命周期,我在重写了onResume()
<pre name="code" class="java"> @Override
public void onResume() {
super.onResume();
myScrollView.scrollTo(0,0);//从其他Activity回来,让ScrollView置顶
}



就这样,把代码中,布局中,fragment的生命周期中(就是以上我写的所有的代码)设置完毕,就完美啦~~没瑕疵!!!

小菜鸟学习ing...加油↖(^ω^)↗~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息