2012-03-22 21 views
2

我的问题是非常相似,这个没有答案之一,有一些小的区别,我将解释:TabHost内滚动型力量它,它滚动到下

TabHost inside of a Scrollview: always scrolls down when a Tab is clicked

我的滚动型发起滚动至底部,显示TabHost内容而不是顶部的内容(你可以在链接的问题中看到截图,它非常相似)。

如果我手动向上滚动,点击不同的标签不会影响ScrollView,问题只在第一次显示。 这是另一个问题的区别。

事情我尝试没有成功:

  1. 做了滚动内顶部组件可获得焦点,因此他们将获得焦点,而不是标签。
  2. 强制ScrollView滚动到onResume()方法的顶部,使用sv.fullScroll(View.FOCUS_UP);sv.scrollTo(0, 0);。此外,在初始化中没有运气,但随后调用onResume()有效地将其滚动到顶部。

关于为什么会发生这种情况的任何想法?如何进一步调查的提示也非常受欢迎。

回答

7

可能来不及帮助您佩德罗,但我确实找出了一个解决方案,为我工作。我注意到在TabHost源代码中,如果视图中没有其他内容有焦点,它就会请求焦点。所以我确保了Scroll视图中的第一个组件是可以聚焦的,并且要求它专注于它。

// Get the first component and make sure it is focusable. Note you have to use setFocusableInTouchMode and not setFocusable for this to work. 
TextView v = (TextView) view.findViewById(R.id.first_component_in_view); 
v.setFocusableInTouchMode(true); 
v.requestFocus(); 

希望这会帮助别人。

+0

不迟到!我在我的onCreate()中实现了这一点,它作为一个魅力:)感谢分享它弥敦道! – Pedro 2012-05-04 12:14:38

1

我有类似的问题,并没有解决它。但是,要强制滚动视图滚动,您需要通过单独的线程更新它的进度以在UI上发布。例如

quickScroll.post(new Runnable() { 
       @Override 
       public void run() { 

          quickScroll.scrollTo(0, 54); 

       } 
      }); 

其中quickScroll是我的ScrollView。我相信这样做的原因是,您已经用图解方式定义了布局,或者从自定义视图组中夸大了它。所以setContentView不包含对scrollView的引用,所以你必须强制UI更新分配给ScrollView的变量。