Кнопка возврата Android из WebViewClient не возвращается к текущей активности - PullRequest
0 голосов
/ 07 октября 2011

Я хочу, чтобы при нажатии кнопки отображалась веб-страница, я использую стандартный подход с WebViewClient и WebChromClient, например, так:

final Button revsButton = (Button) this.findViewById(R.id.buttonReviews);
revsButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        wb.setWebViewClient(new ShareWebViewClient());  
        wb.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                activity.setTitle("Loading Reviews...");
                activity.setProgress(progress * 100); 
                if(progress == 100)
                    activity.setTitle(R.string.app_name);
            }
        });
        wb.getSettings().setJavaScriptEnabled(true);  
        wb.loadUrl(revString );  
        setContentView(wb);                         
    }
}); 


private class ShareWebViewClient extends WebViewClient {  
    public boolean shouldOverrideUrlLoading(WebView view, String url) {   
        view.loadUrl(url);   
        return true;  
    } 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
          Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
      }
} 

Все это прекрасно работает, дело в том, что когда я нажимаю кнопку «Назад», она полностью выходит из моей активности и возвращается на предыдущую страницу. То, что я действительно хочу, чтобы кнопка «Назад» выполняла, - это закрывала WebViewClient и возвращалась к дисплею с кнопкой на нем. Это то, что я пытался сделать до сих пор, половина из которых работала - она ​​не покидала активность, но страница активности была просто пустым экраном вместо того, чтобы показывать элементы управления, которые должны быть там.

@Override
public void onBackPressed() {
    if (wb.getVisibility() == View.VISIBLE) {
        wb.setVisibility(View.INVISIBLE);
    } else {
        finish();
    }
}

1 Ответ

2 голосов
/ 07 октября 2011

Полагаю, это происходит потому, что вы используете WebViewClient, а не запускаете браузер с использованием стандарта:

Uri uri=Uri.parse(urlString);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
activity.startActivity(intent);

В этом случае кнопка НАЗАД закроет активность браузера, и вы вернетесь к своей основной деятельности.

В вашем случае я бы предложил в onBackPressed() - восстановить исходный контент, выбрав

setContentView(my_original_layout);
...