2015-02-27 4 views
1

В моем приложении для Android я запускаю новую активность, переопределяя загрузку URL-адреса WebView, который загружает локальный файл html из активов. Когда я нажимаю кнопку «Назад» на Android-устройстве, чтобы вернуться к Activity с помощью WebView, WebView теперь отображает сообщение «Веб-страница недоступна» со ссылкой на предыдущее действие как «веб-страницу», которую он пытается загрузить, например. файл: ///android_asset/com.example.myproject.BackButtonActivity вместо файла: ///android_asset/example.htmlAndroid: кнопка «Назад» вызывает WebView для поиска неправильного актива

WebView устанавливается с помощью следующего кода в OnCreate методу Activity в:

this.webView = (WebView)findViewById(R.id.webview); 
this.webView.loadUrl("file:///android_asset/example.html"); 

WebViewClient webViewClient = new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.contains("start.back.button.activity")) { 
      Intent intent = new Intent(getBaseContext(), BackButtonActivity.class); 
      startActivity(intent); 
      return false; 
     } 

     view.loadUrl(url); 
     return true; 
    } 
}; 

this.webView.setWebViewClient(webViewClient); 

Когда отображается действие, содержащее WebView, все отображается правильно. Я могу щелкнуть ссылку и начать новую активность. Однако, когда я нажимаю кнопку «Назад устройства», WebView ищет актив с именем имени класса предыдущего действия, а не исходного файла, и не может правильно загрузиться.

Любые идеи о том, почему это происходит, и любые потенциальные исправления были бы весьма полезны.

Вот вывод LogCat с момента нажатия кнопки назад нажата до момента, когда активность, содержащая WebView представлена:

02-28 02:58:39.218 9291-9317/com.example.myproject V/webcore﹕ 230 arg1=1 arg2=0 obj=null 
02-28 02:58:39.231 9291-9317/com.example.myproject V/webcore﹕ 230 arg1=0 arg2=0 obj=null 
02-28 02:58:39.243 9291-9291/com.example.myproject D/GraphicBuffer﹕ create handle(0x61230760) (w:480, h:782, f:1) 
02-28 02:58:39.245 9291-9291/com.example.myproject D/GraphicBuffer﹕ close handle(0x61230760) (w:480 h:782 f:1) 
02-28 02:58:39.246 9291-9291/com.example.myproject D/GraphicBuffer﹕ create handle(0x61230760) (w:480, h:782, f:1) 
02-28 02:58:39.248 9291-9317/com.example.myproject V/webcore﹕ SET_ACTIVE arg1=1 arg2=0 obj=null 
02-28 02:58:39.248 9291-9291/com.example.myproject V/InputMethodManager﹕ onWindowFocus: android.webkit.WebView{41d02530 VFEDHVCL .F....ID 0,0-480,672 #7f0d001f app:id/activity_mywebview} softInputMode=16 first=true flags=#1810100 
02-28 02:58:39.248 9291-9291/com.example.myproject D/webview﹕ onCreateInputConnection 
02-28 02:58:39.248 9291-9291/com.example.myproject D/WebViewInputConnection﹕ resetBatchLevel mBatchLevel = 0 
02-28 02:58:39.248 9291-9291/com.example.myproject V/InputMethodManager﹕ START INPUT: android.webkit.WebView{41d02530 VFEDHVCL .F....ID 0,0-480,672 #7f0d001f app:id/activity_mywebview} [email protected] [email protected] controlFlags=#105 
02-28 02:58:39.251 9291-9291/com.example.myproject V/InputMethodManager﹕ Starting input: Bind result=InputBindResult{[email protected]8 com.htc.sense.ime/.HTCIMEService #2861} 
02-28 02:58:39.267 9291-9325/com.example.myproject I/SurfaceTextureClient﹕ [STC::queueBuffer] (this:0x5eb9d4e0) fps:1.52, dur:12462.08, max:12084.30, min:5.31 
02-28 02:58:39.267 9291-9325/com.example.myproject I/SurfaceTextureClient﹕ [STC::queueBuffer] this:0x5eb9d4e0, api:2, last queue time elapsed:12084.30 
02-28 02:58:39.267 9291-9325/com.example.myproject I/BufferQueue﹕ [unnamed-9291-0](this:0x5eb9c5f0,api:2) [queue] fps:1.52, dur:12461.71, max:12084.44, min:5.32 
02-28 02:58:39.269 9291-9291/com.example.myproject I/BufferQueue﹕ [unnamed-9291-0](this:0x5eb9c5f0,api:2) [release] fps:1.60, dur:12467.44, max:12075.28, min:6.18 
02-28 02:58:39.288 9291-9291/com.example.myproject D/GraphicBuffer﹕ create handle(0x5e3d6d70) (w:480, h:782, f:1) 
02-28 02:58:39.289 9291-9291/com.example.myproject D/OpenGLRenderer﹕ Flushing caches (mode 0) 
02-28 02:58:39.289 9291-9291/com.example.myproject D/GraphicBuffer﹕ close handle(0x5ed66d70) (w:480 h:782 f:1) 
02-28 02:58:39.290 9291-9291/com.example.myproject D/GraphicBuffer﹕ close handle(0x5e3d6d70) (w:480 h:782 f:1) 
02-28 02:58:39.296 9291-9291/com.example.myproject D/GraphicBuffer﹕ create handle(0x5f38db68) (w:480, h:782, f:1) 
02-28 02:58:39.604 9291-9291/com.example.myproject D/OpenGLRenderer﹕ Flushing caches (mode 0) 
02-28 02:58:40.330 9291-9325/com.example.myproject I/SurfaceTextureClient﹕ [STC::queueBuffer] (this:0x5eb9d4e0) fps:3.76, dur:1063.85, max:1019.87, min:6.87 
02-28 02:58:40.330 9291-9325/com.example.myproject I/BufferQueue﹕ [unnamed-9291-0](this:0x5eb9c5f0,api:2) [queue] fps:3.76, dur:1063.79, max:1019.96, min:6.88 
02-28 02:58:40.436 9291-9291/com.example.myproject D/GraphicBuffer﹕ create handle(0x5e3d5fd0) (w:480, h:782, f:1) 
02-28 02:58:40.441 9291-9291/com.example.myproject I/BufferQueue﹕ [unnamed-9291-0](this:0x5eb9c5f0,api:2) [release] fps:3.41, dur:1171.79, max:1126.83, min:6.62 
02-28 02:58:40.445 9291-9291/com.example.myproject I/SurfaceTextureClient﹕ [STC::queueBuffer] (this:0x5ed2bbc8) fps:1.68, dur:1188.10, max:1114.11, min:73.99 
02-28 02:58:40.453 9291-9291/com.example.myproject D/GraphicBuffer﹕ create handle(0x5ed72be8) (w:480, h:782, f:1) 

ответ

1

Вы должны изменить операторы возврата вашего WebViewClient:

WebViewClient webViewClient = new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.contains("start.back.button.activity")) { 
      Intent intent = new Intent(getBaseContext(), BackButtonActivity.class); 
      startActivity(intent); 
      return true;  // <--- Switch to true 
     } 
     //view.loadUrl(url); // <--- You don't need this line when returning false 
     return false;   // <--- Switch to false 
    } 
}; 

От docs:

Возвращает true, если хост-приложение wa nts для обработки самого события ключа, в противном случае возврат false

+1

Ну, это было легко. Благодаря! – Pete

Смежные вопросы