setHasOptionsMenu、ActionBar,SearchViewそしてFocus
ActionBarにSearchViewを入れて以下のようなActiviteに2つのFragmentが入っていると。。。
[action bar(searchview)]
[ListFragment][WebView+Fragment ]
action barのSearchViewに検索キーを打つ入れるたびに、
下の2つのfragmentがリアルタイムに変化するコードの場合を考える。
WebView+Fragment 内にsetHasOptionsMenu(true);の呼び出しが
あると(これはよくあるパターンだと思う)
そのコール時にAction Barを作り直すため、SearchViewの、
Focusが失われてしまう。 そのため、IUは最悪になってしまう。
これを回避するには2つの解決策が思い浮かぶ。
1. setHasOptionsMenu(true);を呼ばない
2. [WebView+Fragment ]、setHasOptionsMenu(true);から呼ばれるonCreateOptionsMenu内でSearchViewが生成された後、SearchView.requestFocus()を呼ぶ。 尚、requestFocus()は呼ぶコードの位置によってはFocusが移動しないことがある。
1はFragment個別のメニューが設定できないため、使いやすさが失われる
2は検索キーのRestore等もあるのでこの方法をとるのがいい
ということで2を採用
コメント
コメントを投稿