2016-09-24 85 views
0

我試圖創建一個谷歌形式調查並認爲這是一個很好的機會,以獲得一個Android開發的味道一個kiosk包裝(我的第一次嘗試是)。webview loadUrl停止工作AFTER控件在谷歌表單上獲取焦點

問題

我重寫,以便在onBackPressed()允許用戶跳轉到我主頁時,我意識到,一旦用戶已經獲得焦點(鏈接到各種調查的索引頁)到調查表單上的一些輸入字段,我不再能夠加載主頁(loadUrl)。

我無法在其他網站(如google.com)的輸入字段中複製此行爲。因此,我的猜測是,谷歌表格使用一些複雜的JavaScript(?),並以某種方式混淆隨後的loadUrl調用?但這是我在java或android上的第一次嘗試,我很慚愧地承認我在黑暗中摸索。

我的代碼表現出的問題

我已經下調錶現出的問題到最低限度的代碼。這兩個loadUrl()調用,打開我創建的示例谷歌表單。如果有人能指出我的錯誤,併爲我解決這個問題提供一些指導,我會很高興!

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.ViewGroup; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.FrameLayout; 

public class MainActivity extends AppCompatActivity { 

    protected FrameLayout webViewPlaceholder; 
    protected WebView webView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Initialize the UI 
     initUI(); 
    } 

    protected void initUI() 
    { 
     // Retrieve UI elements 
     webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder)); 

     // Initialize the WebView if necessary 
     if (webView == null) 
     { 
      // Create the webview 
      webView = new WebView(this); 
      webView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
      webView.getSettings().setSupportZoom(true); 
      webView.getSettings().setJavaScriptEnabled(true); 


      // Load the URLs inside the WebView, not in the external web browser 
      webView.setWebViewClient(new WebViewClient()); 

      // Load a page 
      webView.loadUrl("https://docs.google.com/forms/d/e/1FAIpQLSdkbLwUPSPL1fx1oL8iMyLkBiMY591qjZ-xwCEf15fyX3ikYw/viewform"); 
     } 

     // Attach the WebView to its placeholder 
     webViewPlaceholder.addView(webView); 
    } 

    @Override 
    public void onBackPressed() { 
     webView.loadUrl("https://docs.google.com/forms/d/e/1FAIpQLSdkbLwUPSPL1fx1oL8iMyLkBiMY591qjZ-xwCEf15fyX3ikYw/viewform"); 
    } 

行爲

因爲它是,它會加載樣品調查表。如果你按下android UI後退按鈕,它會重新加載它(爲了簡化,在這個例子中,我使用與主頁相同的URL)。如果您向前導航(調查的第二步),則android UI後退按鈕會將您帶到封面頁上,表明確實loadUrl()有效。但是,如果在第二步中將焦點置於文本字段(或單選按鈕)上,則android UI後退按鈕將停止運行。

錯誤

每次我按下UI後退按鈕(無論它是否有效與否,我得到以下錯誤):

W/UnimplementedWebViewApi: Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown(WebView.java:2310) 

之前的代碼剝離下來到最基本的要素,我倒是獲得下一個消息,而不是:兩個錯誤消息

Webview loadUrl won't work after user focuses on google forms form controls (error InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient) 

我發現多個職位,但沒有什麼,我可能涉及到。任何幫助將非常感激!

回答

0

有趣的事情如何一個良好的睡眠可以幫助! 爲什麼它的價值,我嘗試了以下,現在它的作品:在重新加載一個新的網址與loadUrl()之前,我禁用JavaScript,並重新啓用它,只要我加載新頁面!

webView.getSettings().setJavaScriptEnabled(false); 
webView.loadUrl("https://docs.google.com/forms/d/e/1FAIpQLSdkbLwUPSPL1fx1oL8iMyLkBiMY591qjZ-xwCEf15fyX3ikYw/viewform"); 
webView.getSettings().setJavaScriptEnabled(true); 

上面的代碼是onBackPressed()