ScrollView内的TabHost强制它滚动到底部

时间:2012-03-22 16:05:59

标签: android android-tabhost android-scrollview

我的问题与这个未解决的问题非常相似,我将解释一些小的差异:

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

我的ScrollView启动滚动到底部,显示TabHost内容而不是顶部的内容(您可以在链接的问题中看到屏幕截图,它非常相似)。

如果我手动向上滚动,单击不同的选项卡不会影响ScrollView,问题仅在第一次显示时出现。 这是另一个问题之间的区别。

我尝试过的事情没有成功:

  1. 使ScrollView中的顶部组件可以对焦,这样他们就可以获得焦点而不是标签。
  2. 强制ScrollView使用onResume()sv.fullScroll(View.FOCUS_UP);滚动到sv.scrollTo(0, 0);方法的顶部。此外,初始化没有运气,但后来对onResume()的调用有效地将其滚动到顶部。
  3. 有关为何发生这种情况的任何想法?关于如何进一步调查的提示也非常受欢迎。

2 个答案:

答案 0 :(得分:7)

可能为时已晚,无法帮助您佩德罗,但我找到了一个对我有用的解决方案。我在TabHost源代码中注意到,如果视图中没有其他内容具有焦点,则它会请求Focus。所以我确保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();

希望这会对某人有所帮助。

答案 1 :(得分:1)

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

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

                             quickScroll.scrollTo(0, 54);

                } 
            });

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