質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1780閲覧

Androidstudio TabLayoutを用いてのWebアプリ

ludolf

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/08/26 02:34

いつもお世話になっております。

【やっている事・やりたい事】
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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WebView#onPauseを呼んでいるのにonResumeが呼ばれていないのが原因かと思います。onPauseに対応する再開のライフサイクルイベントはonResumeですので、適切に呼ぶようにしてみてください。

java

1@Override 2public void onResume() { 3 super.onResume(); 4 mWebView.onResume(); 5}

投稿2019/09/07 01:36

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ludolf

2019/09/11 08:44

返信が遅くなり大変申し訳ございません、、 実装してみたら一発で思うような動きになりました!^^ 感激です! ライフサイクルイベントの「onResume」の挙動やどういった処理するのか自分で勉強いたします。 本当にありがとうございました。 勝手ながらフォローさせていただきます。 今後ともよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問