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

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

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

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

317閲覧

課金後にフラグメントを即時非表示する際の疑問点。

noko123

総合スコア28

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/07/18 06:27

編集2021/07/18 09:13

google play billing libraryを使って課金後に特定のフラグメントを即時非表示にしたいです。billingUpdataListener内で共有プリファレンスの値をtrueに変更しています。課金完了後にダイアログが閉じられると、課金メニューは共有プリファレンスの値変更とともに非表示になっているのに、framelayoutにreplaceで展開したフラグメントが破棄されず残ってしまいます。

override fun onPrepareOptionsMenu(menu: Menu?): Boolean {// val billing=pref.getBoolean("billing", false) if(billing==true){ menu?.getItem(2)?.setVisible(false) } return true }
override fun onResume(){ val billing=pref.getBoolean("billing",false) if(billing==false){ val fragment=Fragment() supportFragmentManager.biginTransaction()apply{ replace(R.id.framelayout,fragment) commit() } } }

onResume()に記載したfragmentに関するコードが実行されていないのかと思い、確認のため

val billing=pref.getBoolean("billing",false) if(billing==false){ val fragment=Fragment() supportFragmentManager.biginTransaction()apply{ replace(R.id.framelayout,fragment) commit() } }else{ binding.framelayout.removeAllViews() }

とすると、課金ダイアログが閉じられるとともにフラグメントが消えました。ということは、onResume()は実行されていて、値はtrueに変更されているということだと思うのですが、なぜ以前のフラグメントがそのまま表示されてしまうのでしょうか?replaceしていてもバックスタックに残っているということでしょうか?もし破棄させる方法をご存じの方がいらっしゃれば教えて下さい。よろしくお願いします。

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

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

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

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

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

jimbe

2021/07/18 17:41

> framelayoutにreplaceで展開したフラグメントが破棄されず残ってしまいます 確認のために入れられた binding.framelayout.removeAllViews() 以外に、フラグメントを削除しているコードが見当たりませんが…。 特定のフラグメント~とか以前のフラグメント~という表現ではなく、具体的にどのフラグメントなのかや、その生成・削除に関するコードをご提示されては如何でしょうか。
noko123

2021/07/19 04:03

コメントありがとうございます。onResume()を通っており、値がtrueにかわっているのなら、フラグメントを削除しなくてもfalseの時にフラグメントを展開しているコードは実行されず、作成自体がされないのでは?と思い質問させていただきました。
jimbe

2021/07/19 07:17

一度作成したら削除しない限り存在するのは、オブジェクトとしては当然だと思いますが、なぜ「(2度目の)作成をしない=削除される」ということになったのでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問