Закрыть мягкую клавиатуру во фрагменте - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть фрагмент, который имеет SearchView. Когда я нажимаю в окне поиска, появляется клавиатура. Я ввожу поисковый запрос и нажимаю «Ввод», клавиатура исчезает, и я получаю страницу с результатами. Когда я выбираю элемент в своем списке результатов, я возвращаюсь к фрагменту поиска, и снова появляется клавиатура. Как мне не вернуть клавиатуру? Вот часть моего кода:

public class LocationFragment extends ListFragment implements OnItemLongClickListener, OnClickListener{
    // ===========================================================
    // Constants
    // ===========================================================
    private static final int BTN_ID = 0x5f000001;
    private static final String DEBUG_TAG = "Tablet/LocationFragment";
    // ===========================================================
    // Fields
    // ===========================================================
    private int pos;
    private int mPositionToDelete = 0;
    private FragmentListener listener;
    private Activity mActivity;

    // ===========================================================
    // Lifecycle
    // ===========================================================
    @Override
    public void onAttach(Activity activity) {
        mActivity = activity;
        super.onAttach(activity);
        try {
            listener = (FragmentListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement Fragment");
        }
    }
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
    }
    @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.locations_tile, null);
        SearchManager sm = (SearchManager)getActivity().getSystemService(Context.SEARCH_SERVICE);
        final SearchView sv = (SearchView)v.findViewById(R.id.search_view);
        sv.setSearchableInfo(sm.getSearchableInfo(getActivity().getComponentName()));
        sv.setSubmitButtonEnabled(true);
        consumeKeyUp(sv);
        return v;
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final ListView lv = getListView();
        lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        lv.setItemChecked(pos, true);
        lv.setSelector(R.xml.location_select_gradient);
        lv.setCacheColorHint(0x00000000);
        lv.setSelector(R.drawable.list_item_selector);
        lv.setOnItemLongClickListener(this);
        lv.setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    switch(keyCode) {
                        case KeyEvent.KEYCODE_DPAD_DOWN:
//                          Log.i(DEBUG_TAG, "onkeyDown");
                            return !(lv.getSelectedItemPosition() < lv.getCount() - 1);
                        case KeyEvent.KEYCODE_DPAD_UP:
//                          Log.i(DEBUG_TAG, "onkey up");
                            if(lv.getSelectedItemPosition() == 0) {
//                              Log.i(DEBUG_TAG, " requesting for search focused");
                                return LocationFragment.this.getView().findViewById(R.id.search_view).requestFocus();
                            } else return false;
                        case KeyEvent.KEYCODE_DPAD_RIGHT:
                            Log.i(DEBUG_TAG, "KEYCODE_DPAD_RIGHT");
                            return true;
                    }
                    return false;
                }
                return false;
            }
        });

        ImageView closeBtn = (ImageView) getView().findViewById(R.id.locationsCloseButton);
        closeBtn.setOnClickListener(this);
        closeBtn.setFocusable(true);
        closeBtn.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    v.setOnKeyListener(new OnKeyListener() {
                        @Override
                        public boolean onKey(View v, int keyCode, KeyEvent event) {
                            if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
                                Log.i(DEBUG_TAG, "keypad Center");
                                return false;
                            }
                            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                                return !(KeyEvent.KEYCODE_DPAD_DOWN == keyCode);
                            }
                            return false;
                        }
                    });
                } else {
                    v.setOnKeyListener(null);
                }

            }
        });
    }

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Вы могли бы попытаться очистить фокус представления поиска в обратном вызове щелчка списка, например, sv.clearFocus()

Я получаю представление поиска, чтобы сделать это в OnCreateOptionsMenu, используя getActionView() в MenuItem.

Между прочим, я также называю следующее в моем поиске в onCreateOptionsMenu

final InputMethodManager imm = (InputMethodManager) getActivity().getSystemServiceContext.INPUT_METHOD_SERVICE);
imm.showSoftInput(searchView, InputMethodManager.SHOW_IMPLICIT);

Если честно, я нахожу, что вся клавиатура мягких клавиш немного чёрная

0 голосов
/ 14 января 2014
private SearchView mSearchView;

...

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.search_menu, menu);

    // Associate search able configuration with the SearchView
    android.app.SearchManager searchManager = (android.app.SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    mSearchView.setIconifiedByDefault(false);

    return super.onCreateOptionsMenu(menu);
}

private result() {
    mSearchView.clearFocus();
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
}

не используйте startSearch или onSearchRequested

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...