0


タイトルが示すように、フラグメントに検索ウィジェットを実装する際に問題があります。私の問題は、インフレータを使用して onCreateOptionsMenu 内のカスタム ビューを膨張させた後、SearchView が常に null であることです。
誰かが同じまたは同様の問題を抱えていたら、説明に感謝します! :)
私はこの 2 日間、これに頭を悩ませました... レイアウトは次のとおりです。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/menu_search"
        android:title="Search"
        android:icon="@drawable/abs__ic_search"
        android:showAsAction="always|collapseActionView"
        android:orderInCategory="0"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"/>

    <item android:id="@+id/menu_settings"
        android:title="Settings"
        android:icon="@drawable/jk_uma_button_settings_normal"
        android:showAsAction="always"
        android:orderInCategory="1"
         />
</menu>

コード

Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_explore, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                Log.i(TAG, "======================FOCUS TRUE============");
            }else{
                Log.i(TAG, "======================FOCUS FALSE===========");
            }
        }

    });
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate");
    api_key = Configuration.get_prefereence_string(getActivity(), "user_activation_key", null);
    user_id = Configuration.get_prefereence_string(getActivity(), "user_id", null);
    setHasOptionsMenu(true);
}
4

1 に答える 1

4

私の知る限り、onCreateOptionsMenu は onCreate 中に呼び出されますが、メソッドの最後でオプション メニュー機能を有効にします。Fragment のコンストラクターで HasOptionsMenu(true) を設定してみてください。

public YourFragment() {
    this.setHasOptionsMenu(true);
}

アクティビティからハードウェア検索ボタンを押すには

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_SEARCH) {
        this.onSearchClicked();
        return true;
    }
    return false;
}
于 2013-03-12T13:47:23.500 に答える