0

runOnUiThread()内のキーボードを隠すために(フラグメントの内部から)呼び出しを行うとキーボードは隠れますが私がactivity.getCurrentFocus()。post()の内部から同じことをすると、キーボードは隠されません。コードの下softkeyboardはview.post()で期待通りに動作しませんが、runOnUIThread()内でうまく動作します

1)

activity.runOnUiThread(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
          imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
         } 
      }); 

2作品)が、これはAndroidのドキュメントは、次の言うview = activity.getCurrentFocus();

activity.getCurrentFocus().post(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
          imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
         } 
      }); 

ません: -

A)公衆final void runOnUIThread(Runnable action) - 指定されたactを実行します。イオンをUIスレッドに追加します。現在のスレッドがUIスレッドの場合、アクションは即座に実行されます。現在のスレッドがUIスレッドでない場合、アクションはUIスレッドのイベントキューにポストされます

b)public boolean post(実行可能アクション) - メッセージキューにRunnableが追加されます。実行可能ファイルはユーザーインターフェイススレッド上で実行されます。

誰かが親切に説明できますか、事前に感謝してください!

答えて

0

と思ったらactivity.getCurrentFocus().post()と思っていますが、ビューを行った後にレイアウト、サイズ変更、更新しています。したがって、あなたのビューを更新する必要がない場合、それは実行されません。ログ/ブレークポイントを追加して実行されたかどうか確認しましたか? 実行されている場合は、キーボードがちょうど復帰している可能性があります。

+0

こんにちは@beef、お返事ありがとう、コードが実行されている、キーボードは単に非表示にしません。キーボードの呼び出しを非表示にする前に、キーボードの上にいくつかの単語候補が表示された「完了」ボタンがありますが、この後にgetCurrentFocus()。post()を使用してキーボード呼び出しを非表示にすると、完了したボタンはEnterボタンがあり、もうキーボードの上部に単語候補は表示されませんが、キーボードは隠れません。すべてが言って、私がrunOnUiThreadを使うと、キーボードは常に隠れてしまいます。 – Ajit

+0

@Ajitそれは面白いです。完了ボタンが入力ボタンになるという事実は、キーボードが表示されるように求められているが、テキストフィールドに関する正しい情報を受け取っていないことを示唆している。テキストフィールドのタイプと同じです。今質問はなぜキーボードが再び出現するよう求められているのか... Traceviewを使って、 – beef

関連する問題