ホーム>source

バックグラウンド

こんにちは、 checkEmailAvailability という関数があります   HTTP を送信します  フォーカスが EmailEditText の外にあるときに要求する  (基本的に私は checkEmailAvailability にしたかった  ユーザーが入力を完了したとき)。

関数の結果に基づいて、 errorTextView というエラーtextViewを表示または非表示にします 。

問題

次の方法を使用して、フォーカスの変更を処理し、電子メールの可用性を確認しています。

EmailEditText.setOnFocusChangeListener { view, hasFocus ->
            if (!hasFocus){
                checkEmailAvailability()
            }else{
                canRegisterEmail = false
                emailAvailabilityCheckDone = false
            }
        }

フォーカスが EmailEditText にある場合を除き、すべて正常に機能します。  そして、私は別の fragment に行きます 、再び checkEmailAvailability()  私はすでにこの fragment の外にいるので、呼び出されます  関数は errorTextView を非表示/表示しようとします 、アプリはエラーでクラッシュします:

errorTextView must not be null

フラグメントが閉じられようとしているときにonFocusChangeのチェックを停止するにはどうすればよいですか、このクラッシュを防ぐために何を提案しますか?

あなたの答え
  • 解決した方法 # 1

    この解決策を試してください

    この変数を宣言する

     private var isFragment_visible: Boolean = false;
    
    

    その後、 onCreateView()

    isFragment_visible=true
    
    

    onDestroyView()

    isFragment_visible=false
    
    

    この変数を使用します

    EmailEditText.setOnFocusChangeListener { view, hasFocus ->
                if (!hasFocus&&isFragment_visible){
                    checkEmailAvailability()
                }else{
                    canRegisterEmail = false
                    emailAvailabilityCheckDone = false
                }
            }
    
    

  • 解決した方法 # 2

    onViewCreatedでリスナーを作成し、view.editTextとしてeditTextにアクセスしてみてください。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ 文字列イテレータ変数をC ++の関数に渡す方法は?