将键盘屏幕隐藏在片段中

时间:2018-07-03 01:28:58

标签: android android-fragments

我想知道在活动中切换片段时如何隐藏键盘屏幕。

我有一个启动片段的活动。这个片段有一个TextInputEditText视图,我可以在其中输入一些文本,当选择TextInputEditText视图时,键盘会自动显示出来。输入完文本后,单击已编程的“按钮”,将我带到另一个片段。不幸的是,键盘屏幕仍显示在这个新片段中,我希望它被隐藏/消失。

我在显示TextInputEditText视图的片段中的onCreateView(..)中的setOnClickListener按钮中尝试了以下操作。

摘要:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //send to the backend,when response come back, then insert
                Fragment fragment = null;
                Class fragmentClass = HashHomeFragment.class;

                try {
                    fragment = (Fragment) fragmentClass.newInstance();
                }catch (Exception e){
                    e.printStackTrace();
                }
                FragmentManager fragmentManager = getFragmentManager();
                Bundle bundle = new Bundle();
                bundle.putString("hash_message", "thisstorehaslotsofdiscounts");
                fragment.setArguments(bundle);
                fragmentManager.beginTransaction().replace(R.id.hash_container, fragment, "Home").commit();

                //hide keyboard
                InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

            }
        });

但是当android转到片段时,键盘仍然存在-代码不起作用!

有人可以帮我弄清楚当我从一个片段移到另一个片段时,隐藏键盘的位置和代码吗? ...

4 个答案:

答案 0 :(得分:0)

  //hide keyboard
                InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

FragmentManager fragmentManager = getFragmentManager();
                Bundle bundle = new Bundle();
                bundle.putString("hash_message", "thisstorehaslotsofdiscounts");
                fragment.setArguments(bundle);
                fragmentManager.beginTransaction().replace(R.id.hash_container, fragment, "Home").commit();

倒车似乎可以解决问题。我忘记了当我调用最后一个fragmentManger命令时,当前的片段正在被销毁,并且当前的视图没有指向我认为的那样。 隐藏完好当前视图的键盘,然后切换片段会更有意义!

答案 1 :(得分:0)

也许您必须在隐藏键盘之前清除EditText的焦点。试试这个功能:

private void hideKeyboard(Context context) {
    if (context == null || !(context instanceof Activity) || ((Activity) context).getCurrentFocus() == null) {
        return;
    }
    View view = ((Activity) context).getCurrentFocus();
    if (view != null) {
        view.clearFocus();
        InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputManager != null) {
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
}

答案 2 :(得分:0)

import android.view.inputmethod.InputMethodManager;

InputMethodManager inputManager = (InputMethodManager)
                              getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                 InputMethodManager.HIDE_NOT_ALWAYS);

我将所有按钮的onClick(View v)事件之后放在此位置。

单击按钮时键盘将隐藏。 希望这对您有帮助...

答案 3 :(得分:0)

public void hideKeyboard() {

    View view = getActivity().getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager) getContext().
                getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
}