Android 当带有键盘的活动被销毁和创建时,如何关闭键盘?

Android 当带有键盘的活动被销毁和创建时,如何关闭键盘?,android,android-fragments,keyboard,Android,Android Fragments,Keyboard,当一个活动被破坏时,我有一个键盘用来输入。重新创建活动后,键盘仍在那里。我无法从可见的片段中关闭键盘,就像我想关闭键盘时通常所做的那样。我无法在onDestroy()和onViewCreated()中关闭键盘。我希望能够在活动被销毁之前,甚至在创建活动之后关闭键盘,但不能延迟 创建片段时,我通常可以使用onViewCreated()中的以下方法关闭从上一个片段开始的键盘。所有片段都托管在单个活动中的单个NavHostFragment中: private void hideKeyBoard

当一个活动被破坏时,我有一个键盘用来输入。重新创建活动后,键盘仍在那里。我无法从可见的片段中关闭键盘,就像我想关闭键盘时通常所做的那样。我无法在
onDestroy()
onViewCreated()
中关闭键盘。我希望能够在活动被销毁之前,甚至在创建活动之后关闭键盘,但不能延迟

创建片段时,我通常可以使用
onViewCreated()
中的以下方法关闭从上一个片段开始的键盘。所有片段都托管在单个活动中的单个NavHostFragment中:

    private void hideKeyBoard(View view) {
        InputMethodManager imm = (InputMethodManager) activityMain.getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
当活动被销毁并重新启动时,此方法不再有效。这是否表示内存泄漏?显示键盘的数据存储在哪里?这是我唯一一次从内嵌在工具栏中的SearchView打开键盘,这可能与此有关。我将onQueryTextListener作为内部类添加到SearchView

    private void setUpToolbar() {
        Toolbar toolbar = activityMain.findViewById(R.id.toolbar);
        Menu menu = toolbar.getMenu();
        MenuItem itemSearch = menu.findItem(R.id.action_search);
        if(itemSearch != null) {
            SearchView searchView = (SearchView) itemSearch.getActionView();
            searchView.setOnQueryTextListener(new onQueryTextListenerSearch(activityMain, NAME));
            menu.getItem(ActivityMain.MENU_ACTION_SEARCH_INDEX).setVisible(true);
        }
    }
当片段被销毁并注销时,我会将activityMain清空。上述情况是否会导致内存泄漏,并导致键盘保持打开状态

我假设
InputMethodManager imm=(InputMethodManager)activityMain.getSystemService(Activity.INPUT\u METHOD\u SERVICE)返回一个不同的InputMethodManager,这可能就是为什么在创建片段视图时无法关闭键盘的原因

但是,当碎片被销毁时,为什么我不能关闭键盘?如何关闭键盘

我现在注意到,即使键盘没有打开并且SearchView不可见,重新启动键盘也会出现。这是怎么发生的?!它不是;当片段第一次打开时,t打开