diadia

興味があることをやってみる。自分のメモを残しておきます。

Fragmentの画面が表示されない状況に遭遇した

ベースとなる画面にリサイクラービューを使って表示する。

そして画面遷移先で入力するためのキーボードを表示させる。その状態でベースのアクティビティに戻るとリサイクラービューを始め他のViewもろとも表示されない事態に遭遇した。いわば、レイアウトファイルそのものの存在が消え去ってしまう現象。画面遷移前にキーボードを消してからベースの画面に遷移するときちんと画面表示される。

てことでfragmentのonPause()メソッド内にキーボードを削除する関数を挿入して問題を解決した。

fun hideKeybord(fragment: Fragment){
    //Fragment内でキーボード表示中の状態で元のフラグメントに戻ると、
    //onResumeでレイアウトが適切に表示されない事例が発覚した。
    //そのためにこの関数を作成した
    //キーボードの表示、非表示に関わらずこの関数は問題なく実行されることを確認している。

    //ソフトキーボードを非表示
    val imm : InputMethodManager = fragment.requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(fragment.view?.windowToken, 0)
}