0

Collabsible ActionItemとしてAutoCompleteTextViewがあり、キーボードが展開されてフォーカスされたときにキーボードが表示されるようにしたい。これはonCreateOptionsMenu()の私のコードです:

    menu.add("Search")
            .setIcon(R.drawable.ic_search)
            .setActionView(R.layout.collapsible_edittext)
            .setShowAsAction(
                    MenuItem.SHOW_AS_ACTION_ALWAYS
                            | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);


    final MenuItem searchMenuItem = menu.getItem(0);
    searchMenuItem.setOnActionExpandListener(new OnActionExpandListener() {

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) item
                    .getActionView();
            autoCompleteTextView
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {
                            Log.d(TAG, "onFocusChange: " + hasFocus);
                            if (hasFocus) {
                                mInputManager.showSoftInput(v,
                                        InputMethodManager.SHOW_FORCED);
                            } else {
                                mInputManager.hideSoftInputFromWindow(
                                        v.getWindowToken(), 0);
                            }

                        }
                    });
            autoCompleteTextView.requestFocus();
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) item
                    .getActionView();

            autoCompleteTextView.clearFocus();
            autoCompleteTextView.setText("");
            return true;
        }
    });

初めてActionItemをクリックすると、キーボードが表示されません。折りたたみてアイテムをクリックすると、キーボードが表示されます。ただし、ユーザーがアクションアイテムを最初にクリックしたときにキーボードが表示されるようにしたいと思います。それが重要な場合は、ActionBarSherlockを使用しています。では、なぜ最初の拡張でキーボードが表示されないのですか?何か案は?

4

1 に答える 1

1

編集テキストにフォーカスを手動で設定し、onOptionsItemSelectedメソッドでキーボードを手動で表示してみましたか?

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_SEARCH:
        // select edittext here
        // show keyboard here
        return true;

    }
    return super.onOptionsItemSelected(item);
}

編集:私はここからキーボードを表示するためにこのコードを見つけました:

https://code.google.com/p/android-batavierenrace/source/browse/trunk/BataApp/src/com/ut/bataapp/activities/TeamsActivity.java

私は自分のアプリでそれをテストしました、そしてそれは動作します...

public static void setKeyboardFocus(final EditText primaryTextField) {
                (new Handler()).postDelayed(new Runnable() {
                        public void run() {
                                primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
                                primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
                        }
                }, 100);
        }
于 2012-04-14T17:14:22.657 に答える