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を採用



コメント

このブログの人気の投稿

日本でコンピュータサイエンスを学ぶ難しさ

How to preview nif file on the ubuntu.