Androidstudio TabLayoutを用いてのWebアプリ
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 776
いつもお世話になっております。
【やっている事・やりたい事】
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
下記フラグメントのプログラムです。
public class RedView extends Fragment {
//この媒体のURL設定
final String PROXY = "https://";
final String DOMAIN = "hogehoge/";
final String SITENAME = "red/";
final String RED_URL = PROXY + DOMAIN + SITENAME;
//WebView設定
private WebView mWebView;
private View mPagerAdapter;
//復活したとき用のやつ設定
private String mSavedUrl = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View redView = inflater.inflate(R.layout.red_view, container, false);
//大元のView取得
View wv = inflater.inflate(R.layout.activity_main, container,false);
//ネイティブで閲覧するように設定
redView .setFocusableInTouchMode(true);
//フォーカス設定
redView .requestFocus();
//redのWebView取得
mWebView = (WebView) redView .findViewById(R.id.redWebView);
//WebView設定
mWebView.setWebViewClient(new WebViewClient());
//JavaScriopt使えるように設定
mWebView.getSettings().setJavaScriptEnabled(true);
//帰ってきた用
if(savedInstanceState!=null) {
//復帰した場合はこっち
mSavedUrl = savedInstanceState.getString("last_url");
}else {
//初期に読み込むやつ
mWebView.loadUrl(RED_URL);
}
//外部ドメインは外部ブラウザを開く
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.contains(RED_URL)) {
//url入れ込み
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return true;
}
return false;
}
});
return redView ;
}
@Override
public void onPause() {
super.onPause();
Log.d("onPause","別のActivityが表示されるとき");
mWebView.onPause();
}
@Override
public void onStart(){
Log.d("onStart","Activityが開始されたとき ");
loadUrl(mSavedUrl);
super.onStart();
}
@Override
public void onStop(){
Log.d("onStop","Activityが表示されなくなったとき onStop");
mSavedUrl = mWebView.getUrl(); // 最後に表示していたページを保存
super.onStop();
}
public void loadUrl(String url){
if(url==null)
return;
String now = mWebView.getUrl();
if(url.equals(now)) return; // (**)
mWebView.loadUrl(url);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
WebView#onPauseを呼んでいるのにonResumeが呼ばれていないのが原因かと思います。onPauseに対応する再開のライフサイクルイベントはonResumeですので、適切に呼ぶようにしてみてください。
@Override
public void onResume() {
super.onResume();
mWebView.onResume();
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/09/11 17:44
実装してみたら一発で思うような動きになりました!^^
感激です!
ライフサイクルイベントの「onResume」の挙動やどういった処理するのか自分で勉強いたします。
本当にありがとうございました。
勝手ながらフォローさせていただきます。
今後ともよろしくお願いします!