2

ユーザーが検索用のテキストを入力している間、アプリの特定の機能を無効にしたいと考えています。私のActionBarの関連アイテムのxmlは

<item android:id="@+id/actionbar_search"
    android:orderInCategory="1"
    android:showAsAction="always|withText|collapseActionView"
    android:actionViewClass="android.widget.SearchView"
    android:icon="@drawable/earth_2508858_search_en"
    android:inputType="textPostalAddress" />

そして、検索に対応するために現在持っている対応するコードは

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.action_menu, menu);

    MenuItem DestinationTxt = menu.findItem(R.id.actionbar_search);
    final SearchView mySearchView = (SearchView)DestinationTxt.getActionView();     

    mySearchView.setOnQueryTextListener(new OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) { return false; }

        @Override
        public boolean onQueryTextSubmit(String query) {
            //Hide the Keyboard
            imm.hideSoftInputFromWindow(mySearchView.getWindowToken(), 0);
            // CODE TO DO THE SEARCH
            return true;
        }       
    });
}

SearchView のメソッドを参照しましたが、アクティブかどうかを示すものは何も表示されませんでした。また、テキストが SearchView に入力されていることを示すブール状態変数を入れることについても心配しています。無効な機能が無効のままになるように、状態変数が古くなります。だから私はこれを行うための堅牢な方法を探しています。すべての助けに感謝します:-)。

更新しますOnFocusChangeListener以下の回答は、 mySearchView オブジェクトおよび/または mySearchView.isFocussed() メソッドによって実装されるインターフェースを使用することを提案しています。どちらも有望に聞こえましたが、私は今テストしましたが、どちらもうまくいかないようです。おそらく、彼らの失敗は、この SearchView が ActionBar にあるという事実と関係があるのでしょうか? いずれにせよ、私はまだ堅牢なソリューションを求めています。

4

2 に答える 2

4

すぐそこです。

mySearchView.setOnQueryTextListener(new OnQueryTextListener() {
    @Override
    public boolean onQueryTextChange(String newText) { return false; }

ここで、SearchView のテキスト変更の更新を取得します。

戻り値は次のようになります (ドキュメント):

SearchView が、可能な場合に提案を表示するデフォルト アクションを実行する必要がある場合は false を返します。アクションがリスナーによって処理された場合は true を返します。

SearchView がアクティブ化されているか非アクティブ化されているかを知りたい場合は、View.setOnFocusChangeListener(View.OnFocusChangeListener)を使用します。

public interface OnFocusChangeListener{

    public void onFocusChange (View v, boolean hasFocus);
    // The boolean will tell you if it's focused or not.

}
于 2013-05-16T11:02:52.840 に答える