2012-03-22 41 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的變量。