webview loadUrl перестает работать ПОСЛЕ того, как элементы управления в формах Google получают фокус

Я пытался создать киоск-оболочку для множества опросов google form и подумал, что, возможно, это хорошая возможность попробовать разработку для Android (моя первая попытка).

проблема

Я переопределяю onBackPressed(), чтобы позволить пользователю перейти на мою домашнюю страницу (страницу индекса со ссылками на различные опросы), когда я понял, что когда-то пользователь уже сосредоточил внимание на каком-то поле ввода на форма опроса, я больше не мог загрузить домашнюю страницу (loadUrl).

Я не смог воспроизвести это поведение с полями ввода на других сайтах, таких как google.com. Поэтому я предполагаю, что формы Google используют какой-то сложный javascript(?), и это как-то мешает последующим вызовам loadUrl? Но это моя первая попытка в java или android, мне стыдно признаться, что я блуждаю в темноте.

Мой код, который демонстрирует проблему

Я сократил код, демонстрирующий проблему, до минимума. Оба вызова loadUrl(), откройте образец формы Google, которую я создал. Я был бы так рад, если бы кто-нибудь мог указать на мою ошибку и дать мне некоторое представление о том, как преодолеть эту проблему!

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, он перезагрузится (для простоты в этом примере я использую тот же URL-адрес, что и домашняя страница). Если вы перейдете вперед (2-й шаг опроса), кнопка «Назад» в пользовательском интерфейсе Android перенесет вас на титульную страницу, указывая на то, что loadUrl() действительно сработало. Но если на 2-м шаге вы сосредоточите внимание на текстовом поле (или переключателях), кнопка возврата пользовательского интерфейса Android перестанет работать.

Ошибки

Каждый раз, когда я нажимаю кнопку возврата пользовательского интерфейса (независимо от того, работает она или нет, я получаю следующую ошибку):

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)

Я нашел несколько сообщений об обоих сообщениях об ошибках, но ничего, к чему я мог бы относиться. Любая помощь будет очень признательна!


person FotisK    schedule 24.09.2016    source источник


Ответы (1)


Забавно, как хороший ночной сон может помочь! Что бы это ни стоило, я попробовал следующее, и теперь это работает: перед перезагрузкой нового URL-адреса с помощью loadUrl() я отключаю javascript и снова включаю его, как только загружаю новую страницу!

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

Приведенный выше код представляет собой тело onBackPressed().

person FotisK    schedule 24.09.2016