Я пытался создать киоск-оболочку для множества опросов 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)
Я нашел несколько сообщений об обоих сообщениях об ошибках, но ничего, к чему я мог бы относиться. Любая помощь будет очень признательна!