2012-11-19 77 views
21

我的Android 4.x設備上的WebView之一出現問題。Android webview下拉菜單在Android 4.x設備上無效

Android應用程序有一個Tabhost其中包含片段。其中一個片段包含一個webview。所顯示的頁面有這樣的下拉菜單:

<select id="mySelect" name="mySelect"> 
    <option value="1">Testname 1</option> 
    <option value="2">Testname 2</option> 
    <option value="3">Testname 3</option> 
</select> 

現在,當我打開我的應用程序銀河S3搭載Android 4.1.1(或任何其他Android設備,我可以得到我的手),我可以選擇「測試名1「,然後是」測試名稱2「等。

在Galaxy Nexus上(在運行Android 4.1.1,4.1.2和4.2的不同設備上確認),當我嘗試選擇某個UI時,它只是被阻止。在切換到另一個選項卡並突然返回到webview選項卡後,UI最終會切換到先前選擇的項目。

任何想法是什麼導致這種情況或如何我可以解決這個Galaxy Nexus?我可以追蹤到Tabhostwebviewtabhost中時不起作用,當它不起作用時。這可能與this issue有關。

+0

http://forum.jquery.com/topic/jquerymobile-1-0-does-not-support-android-4-0-ice-cream-sandwich – Omarj

+0

似乎無關,因爲我最小的例子只包含上面的代碼(+「'''等等),並沒有jQuery的了 – Tim

+0

不知道這是否會有所作爲,但也許它值得一擊使用@ + ID/mySelect的編號 – Tkingovr

回答

0

TabHost in ICS?你在使用兼容性包嗎?如果你的工作基本上是3.1+,正確的設計將是使用ActionBar來實現Tabs。

+0

仍然有理由使用「TabHost」而不是「ActionBar」,一個b與Android 2.3的兼容性,其他的例如我無法使用''ActionBar''來處理所有與''TabHost''有關的事情。 – Tim

+0

[在ActionBar中使用它可以解決任何額外的問題](http://actionbarsherlock.com/)它在過去幫助過我,您可以導入這些庫並查看代碼。如果你更具體,我可以爲你發佈一個例子。在您發佈到問題中的鏈接中,文章的底部提供了一個解決方法。讓我知道我能做些什麼來幫助。 [鏈接](https://github.com/JakeWharton/ActionBarSherlock/tree/master/samples/fragments/src/com/actionbarsherlock/sample/fragments)是鏈接到Sherlock庫的片段示例。如果你被卡住,請認真告訴我。 – Sean

1

實際上,您可以使用ActionBar做比使用TabHost更多的功能。包括標籤。 link將允許您在舊版本minSdk = 4中實現ActionBar。我曾與之合作過的大多數用戶體驗開發人員認爲Tabs有點過時了,儘管這樣做會爲用戶提供一個熟悉的用戶界面,但是我要對誰發起衝擊風? ActionBar爲UI提供了一個非常特定的Android外觀和乾淨的感覺。 link是Google推薦的來自該會議的UI模式的文檔。 link是討論會議UI模式的YouTube視頻。遵循這些建議可以更好地審查您的應用程序和更復雜的UI外觀。我不確定你的需求是什麼,但如果你要做點什麼,不妨做對嗎?如果您需要更多幫助,請告訴我。我可以找到你使用ActionBar的例子。 ActionBar link可以給你一些更好的理由,我可以爲什麼它是一個很好的選擇用戶界面。

你是否正確實施你的碎片? link是使用它們的文檔。如果你使用的是動態片段而不是在佈局中實現的固定片段,那麼我在跨應用程序寫入時發現的一個技巧就是調用.clearBackStack();當我有趣的問題,它似乎解決了很多問題。

+0

嗨,肖恩,鏈接不會使我在以前的Android版本中使用ActionBar,請參閱ActionBarSherlock。然而,*你的另一個*答覆說,我應該使用ActionBar而不是解決手頭的問題。我已經說過我不能使用它,因爲我不能實現我必須實現的東西(是的,我已經閱讀了文檔,沒有,我現在不能詳細討論)。現在我可以在沒有TabHost(*做*工作)的情況下手動實現所有東西,問題仍然存在,爲什麼它不能與TabHost一起工作? – Tim

0

嘗試在你的XML佈局,而不是正常TabHost使用這個自定義類:

package com.example.test; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.TabHost; 

public class TabHostFix extends TabHost 
{ 
    public TabHostFix(Context context) 
    { 
     super(context); 
    } 

    public TabHostFix(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    @Override 
    public void onTouchModeChanged(boolean isInTouchMode) 
    { 
     //do not call through to base class, do nothing 
     //this is a fix for tabhost stealing focus from textboxes 
    } 
} 

參考在你的XML佈局自定義類這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<com.example.test.TabHostFix xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="48dp" 
      android:layout_weight="0"/> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:layout_weight="0" /> 
     <FrameLayout 
      android:id="@+android:id/realtabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 
    </LinearLayout> 
</com.example.test.TabHostFix> 

編輯: 作爲替代解決方案,您可以通過使用支持庫中的ViewPager和模仿選項卡的自定義View Pager指標完全替代TabHost。我從來沒有嘗試過,但我已經讀過,有很好的免費第三方查看傳呼機指標here

+0

另外,我會同意使用ActionBar選項卡將是理想的 - 但有一些罕見的情況下,TabHost更靈活,例如,如果您要強制堆疊選項卡,無論設備/方向等。 如果唯一原因你沒有使用ActionBar標籤是因爲向後兼容,那麼我會強烈推薦ActionBarSherlock庫。它很容易使用,並且不需要太多時間來設置。 – craigrs84

+0

我試過這個,但它不起作用(仍然和以前一樣):( – Tim

+1

非常有趣...我剛剛用運行4.1的模擬器測試過,可以確認和你一樣的結果。 tabhost從偷集中文本框,但不糾正在webview中的下拉的奇怪行爲。 – craigrs84

0

選擇選擇後,列表項數據可能會更改,但我們看不到更改。爲此,我們需要顯式刷新選擇組件。希望這可能會解決問題。

$("select#HeightUnit option[value='cm']").attr("selected", "selected"); $('select').selectmenu('refresh');

+0

你能給我更多的上下文如何解決這個問題,而不是使我的UI塊嗎? – Tim

+0

Html刷新是最重要的一個,當選擇像之前一樣時,值將被設置,當我們點擊它時,Webview會以下拉菜單的方式打開它,但是當我們改變它的值時會改變,但是在webview中它可能不會刷新。所以我們需要明確地刷新/轉到另一個選項卡,並且以webview選項卡以任何方式刷新屏幕。在你的情況下$('#select#mySelect')。attr('selected','selected'); $( '選擇')。selectmenu( '刷新');.將在webview中單獨刷新該選擇組件 – Jabeer

+0

您是否需要任何工作示例? – Jabeer

-2
> i think u must add the API version on your activity cause some UI cannot compatible on >android API 8. so check the API SDK like this. 

>@TargetApi(Build.VERSION_CODES.GINGERBREAD) 
>if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) 
>{ 
>// condisition 
>}