2

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

Scrollview 中的 TabHost:单击 Tab 时始终向下滚动

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

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

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

  1. 使 ScrollView 内的顶部组件具有焦点,这样它们将获得焦点而不是选项卡。
  2. 使用或强制 ScrollView 在onResume()方法中滚动到顶部。此外,初始化没有运气,但后续调用有效地将其滚动到顶部。sv.fullScroll(View.FOCUS_UP);sv.scrollTo(0, 0);onResume()

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

4

2 回答 2

7

可能为时已晚,无法帮助您 Pedro,但我确实找到了适合我的解决方案。我在 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();

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

于 2012-05-04T03:36:36.070 回答
1

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

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

                             quickScroll.scrollTo(0, 54);

                } 
            });

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

于 2012-05-04T03:33:29.867 回答