2017-01-12 17 views
-1

requestFocusを自動的にEditTextにフォーカスするように呼びましたが、時には機能するか動作しない場合があります。私たちはUIスレッドにrunnableを追加してそれに集中しました。requestFocus()が機能しない理由は何ですか?

view.post(new Runnable() { 
     @Override 
     public void run() { 
     view.requestFocus(); 
     InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.showSoftInput(view, InputMethodManager.SHOW_FORCED); 
     } 
    }); 

最後に、私はそれがうまくいくことを知っていますが、私は本当に理由が不思議です。どうして?それを知っている人はいますか? (それは 将来的に呼び出されるメインキューにこの呼び出しをスケジュールします

button.post(new Runnable(){ 
    @Override 
    public void run(){ 
     inflatedView.requestFocus(); 
    } }); 

+0

UIスレッドはAndroidのメインスレッドです。何が邪魔でしょうか? –

+1

メインスレッドとUIスレッドは同じものです。つまり、同じエンティティです。したがって、あなたの前提は間違っていて、他にも問題があるかもしれません。私はあなたのビュー階層を見て、それがフォーカスを消費している他のビューではないことを確認することをお勧めします。 – Dibzmania

+1

@OlegBogdanov **メインスレッドは必ずしもUIスレッドではありません**。ドキュメントを読む。 – Enzokie

答えて

2

それはインフレ時にのrequestFocus()を呼び出すためには時期尚早だ、のようなものを呼び出そう)、メインスレッドがここで仕事を終えた後。

https://stackoverflow.com/a/21181502/7267105

関連する問題