いつもお世話になっております。
【やっている事・やりたい事】
AndroidstudioでFragmentを使用して複数のタブメニューを作り一つ一つにWebViewを実装し、Webアプリを作成しております。
例えば、赤・青・黄のタブがあり同じドメインなんですが、ディレクトリがそれぞれ違うWebViewを実装しています。
例↓
赤タブ:https://hogehoge.com/red/index.php
青タブ:https://hogehoge.com/blue/index.php
黄タブ:https://hogehoge.com/yellow/index.php
スワイプして赤から青に移り、そのページを見せるといったWebアプリを作成しているのですが、問題点があり躓いております、、
【聞きたい事・ご教授頂きたいこと】
早速ですが、一度バックグラウンド状態(ホーム画面や他アプリに移った時)から再度アプリを開いたときにWebViewが固まりスクロールバーだけ動かせる状態に陥りました。
色々調べてライフサイクル?が関係してくるのではないかと検討はついているのですが、同じ症状の記事や参考サイトが見つけられませんでした、、
ライフサイクルのonPause・onStart・onStopはアクティビティ間を移動するときに遷移元の情報を維持するため、三つは実装し理解できております。
なぜWebViewが固まり動かなくなったのか、どの関数を用いれば思っている動きができるのかご教授頂ければ幸いです。
※タブメニューやMainActivityは下記参照しています。↓
https://qiita.com/PiyoMoasa/items/a0282483831b5993da02
下記フラグメントのプログラムです。
Java
1public class RedView extends Fragment { 2 3 //この媒体のURL設定 4 final String PROXY = "https://"; 5 final String DOMAIN = "hogehoge/"; 6 final String SITENAME = "red/"; 7 8 final String RED_URL = PROXY + DOMAIN + SITENAME; 9 10 11 //WebView設定 12 private WebView mWebView; 13 private View mPagerAdapter; 14 //復活したとき用のやつ設定 15 private String mSavedUrl = null; 16 17 18 @Override 19 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 20 21 View redView = inflater.inflate(R.layout.red_view, container, false); 22 //大元のView取得 23 View wv = inflater.inflate(R.layout.activity_main, container,false); 24 25 //ネイティブで閲覧するように設定 26 redView .setFocusableInTouchMode(true); 27 //フォーカス設定 28 redView .requestFocus(); 29 //redのWebView取得 30 mWebView = (WebView) redView .findViewById(R.id.redWebView); 31 //WebView設定 32 mWebView.setWebViewClient(new WebViewClient()); 33 34 //JavaScriopt使えるように設定 35 mWebView.getSettings().setJavaScriptEnabled(true); 36 37 //帰ってきた用 38 if(savedInstanceState!=null) { 39 //復帰した場合はこっち 40 mSavedUrl = savedInstanceState.getString("last_url"); 41 }else { 42 //初期に読み込むやつ 43 mWebView.loadUrl(RED_URL); 44 } 45 //外部ドメインは外部ブラウザを開く 46 mWebView.setWebViewClient(new WebViewClient() { 47 @Override 48 public boolean shouldOverrideUrlLoading(WebView view, String url) { 49 50 if (!url.contains(RED_URL)) { 51 //url入れ込み 52 Uri uri = Uri.parse(url); 53 Intent intent = new Intent(Intent.ACTION_VIEW, uri); 54 startActivity(intent); 55 return true; 56 } 57 return false; 58 } 59 }); 60 61 return redView ; 62 } 63 64 65 66 @Override 67 public void onPause() { 68 super.onPause(); 69 Log.d("onPause","別のActivityが表示されるとき"); 70 mWebView.onPause(); 71 } 72 @Override 73 public void onStart(){ 74 Log.d("onStart","Activityが開始されたとき "); 75 loadUrl(mSavedUrl); 76 super.onStart(); 77 } 78 @Override 79 public void onStop(){ 80 Log.d("onStop","Activityが表示されなくなったとき onStop"); 81 mSavedUrl = mWebView.getUrl(); // 最後に表示していたページを保存 82 super.onStop(); 83 } 84 85 86 public void loadUrl(String url){ 87 if(url==null) 88 return; 89 String now = mWebView.getUrl(); 90 if(url.equals(now)) return; // (**) 91 mWebView.loadUrl(url); 92 } 93 94}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/11 08:44