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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

2649閲覧

一度アプリから離れて再び再開する時にエラーが発生します

ko20vonobird

総合スコア50

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/01/28 05:01

編集2017/01/28 07:08

###前提
タイトルのように、一度アプリから離れて再び再開する時に焦点を当てるのですが、再開するときに実行中のメソッドの最初から再び始めることが前提です。
※タイトル画面を現在作成しているので、段階的に画面を作っていくものとなります。

###発生している問題・エラーメッセージ

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addViewInner(ViewGroup.java:4309) at android.view.ViewGroup.addView(ViewGroup.java:4145) at android.view.ViewGroup.addView(ViewGroup.java:4086) at android.view.ViewGroup.addView(ViewGroup.java:4059) at com.gmail.archerygame.Main.parts(Main.java:205) at com.gmail.archerygame.Main$1.onLoadComplete(Main.java:162)

とあるのですが、実際には下記のようにremoveViewを実装しています。

###該当のソースコード
205行目

java

1fl.addView(cta);

162行目前後

java

1action.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { 2 @Override 3 public void onLoadComplete(SoundPool soundPool, int i, int i1) { 4 if (0 == i1) { 5 parts(); 6 } 7 } 8 });

removeView()の箇所

java

1@Override 2 public void onResume() { 3 super.onResume(); 4 pref = getSharedPreferences("keydata", MODE_PRIVATE); 5 key = pref.getString("gatekey", "nothing"); 6 Log.d("keynum", key); 7 if (key == "nothing"){ 8 }else if (key == "parts"){ 9 state = "recome"; 10 fl.removeView(fl); 11 fl.removeView(ll); 12 fl.removeView(title); 13 fl.removeView(cta); 14 parts(); 15 }else if (key == "looper"){ 16 state = "recome"; 17 titley = defaulttitley; 18 titlewherecb = defaulttitlex; 19 s = 37.0f; 20 cnt = 0; 21 looper(); 22 }else if (key == "cb"){ 23 state = "recome"; 24 cnten1a = 0; 25 cb(); 26 }else if (key == "toastm"){ 27 state = "recome"; 28 toastm(); 29 }

###エラーに対して対処したこと
removeViewを実装しました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージを読んでいますか?原因と対処法が全て書かれていますよ。

一度addViewされたViewは再度addViewすることはできません。

投稿2017/01/28 11:45

yona

総合スコア18155

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

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

ko20vonobird

2017/01/28 12:41

再度同じViewを加えるという行為はできないのですね。 You must call removeView() on the child's parent first.ということは、removeView()を各Viewに対して行うと良い、というわけではないのでしょうか?それとも再開するときにaddViewさせない分岐が必要なのでしょうか?
yona

2017/01/28 12:57

やるならそうしなさいというだけです、必ずそうしろというわけではありません。 addViewする必要がないならif文で分ける必要があります。
ko20vonobird

2017/01/28 12:59 編集

そうなのですか、ということは、removeViewは必ずしも必要ではないということですね。 ちなみにremoveViewをしたところでaddViewすることが出来ないことに変わりはないのですか? if文で分けてやってみます。
yona

2017/01/28 13:07

コメントの意味を理解していないですね。 addViewされたViewをaddViewしたいならremoveViewしないといけません。
ko20vonobird

2017/01/28 13:10

そうですね。 なるほど、分かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問