点击DialogFragment中的“取消”按钮后,我该如何启动软键盘?

3

Fragment.java文件:

....
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.skyfrag_layout, container, false);
    getDialog().setTitle("Delete skycard");
    Button btnCancel = (Button) rootView.findViewById(R.id.btnCancel);
    btnCancel.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
          getDialog().cancel();
        }
    });
...

我在onClick函数中尝试了下面的两种方法,但都没有成功。
1) getDialog().getWindow().setSoftInputMode( LayoutParams.SOFT_INPUT_STATE_VISIBLE);
2) ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
1个回答

2
我猜你想再次显示键盘,因为你有一个小部件需要在对话框关闭后进行编辑。
你尝试过调用showSoftInputFromInputMethod(IBinder token, int flags)而不是toggleSoftInputFromWindow吗?请参阅此处的文档。(注意:IBinder可以通过yourView.getWindowToken()获得)
希望这可以帮助你。

是的,你说得对。当对话框关闭时,我试图返回到主UI屏幕上的EditText。我尝试了你的建议,但Android Studio无法解析"getSystemService"。这是基于你的评论我尝试过的代码:public void onClick(View v) { InputMethodManager imm2 = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm2.showSoftInputFromInputMethod(v.getWindowToken(),0); ... - AJW
你在调用时是否在一个Fragment中?如果是这种情况,你需要使用getActivity().getSystemService()... 如果有帮助请告诉我。 - k3v1n4ud3
是的,在片段内。我偶然发现了getActivity(),并将其添加到了imm代码中,现在它可以完美地工作了。感谢您回复我的评论,现在我知道我正在正确的轨道上前进。干杯。 - AJW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接