Назад Навигация в WebView с Deep Link - PullRequest
0 голосов
/ 06 января 2019

Я хочу открыть Deep Link в WebView. WebView имеет свою (вторую) активность. Чтобы вернуться из WebView к MainActivity, мне нужно дважды нажать BackButton. После первого нажатия отображается пустая сторона. Как я могу достичь MainActivity после одного нажатия BackButton?

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ

Intent in = new Intent(MainActivity.this, WebViewActivity.class);
in.putExtra(EXTRA_MESSAGE, "http://play.google.com/store/apps/details?id=de.bernd.schiebepuzzle");
startActivity(in);

ВТОРАЯ ДЕЯТЕЛЬНОСТЬ

public class WebViewActivity extends AppCompatActivity {

    private WebView myWebView;  // Datenschutzerklärung anzeigen
    private WebViewClient myWebViewClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        myWebView = (WebView) findViewById(R.id.myWebView);

        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        myWebView.loadUrl(message);

    } // ende onCreate
}

Что я пробовал:

Переопределить onKeyDown

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    //  https://developer.android.com/guide/webapps/webview#java
    Toast toast = Toast.makeText(getApplicationContext(), "onKeyDown", Toast.LENGTH_SHORT);
    toast.show();

    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}

Переопределить onBackPressed

//https://developer.android.com/training/implementing-navigation/temporal#java

@Override
public void onBackPressed() {

    Toast toast = Toast.makeText(getApplicationContext(), "onBackPressed", Toast.LENGTH_SHORT);
    toast.show();

    if (myWebView.canGoBack()) {
        myWebView.goBack();

        return;
    }
   // Otherwise defer to system default behavior.
    myWebView.goBack();

    super.onBackPressed();
}

Активность родителей в манифесте

 <activity
        android:name=".WebViewActivity"
        android:parentActivityName="de.bernd.schiebepuzzle.MainActivity"></activity>

setWebViewClient

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(MyWebViewClient);

Проблема в том, что onBackPressed или onKeyDown не вызываются нажатием BackButton в первый раз. Событие не сработало . (В моем примере я вижу тост только при втором нажатии.)

Большое спасибо.

...