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

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

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

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

Android

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

Android Studio

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

解決済

Androidstudio TabLayoutを用いてのWebアプリ

ludolf
ludolf

総合スコア39

Java

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

Android

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

Android Studio

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

1回答

0リアクション

0クリップ

1518閲覧

投稿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

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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android

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

Android Studio

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