美好的一天。对不起,长名称,我必须是描述性的。Android - 从类中调用DialogFragment方法关闭DialogFragment的软键盘
我有一个Android应用程序,我有一个自定义ListView与EditText和一个DialogFragment的顶部。用户仍然可以看到EditText,因为DialogFragment没有覆盖整个屏幕,用户仍然可以在ListView中选择EditText。我的自定义ListView中的EditText有一个custom Keyboard from this tutorial。我的对话框片段包含一个使用默认Android软键盘的编辑文本。
我遇到的主要问题是当用户单击我的对话框片段(android软键盘显示)中的EditText并单击自定义ListView中的EditText时,我的自定义键盘显示在Android软件后面键盘和Android软键盘不会折叠/隐藏。
一个解决我确实是这样的:
我提出的对话片段的根视图(的EditText的父视图)是可选择的为这样:
android:clickable="true"
android:focusableInTouchMode="true"
使得聚焦ISN 't“锁定”或被EditText垄断。我还在隐藏软键盘的DialogFragment类中创建了一个函数。我有两个人,他们都工作:
public void hideKB(){
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(instructionInput.getWindowToken(), 0);
//instructionInput is my EditText
}
public void hideKeyboard(View view) {
InputMethodManager imm =(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
我呼吁为二者之一,例如:
instructionInput.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
hideKB();
//hideKeyboard(v);
}
}
});
,它工作正常。当用户点击对话框片段时,软键盘关闭。
现在,我想调用此函数或实现相同的效果,当用户单击我的自定义ListView中的EditText。在我的EditText自定义键盘类具有这样的功能:
public void registerEditText(int resid, final SearchResult context, final ItemDialog itemDialog) {
EditText edittext= (EditText)mHostActivity.findViewById(resid);
edittext.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
Log.d("hello","edittext focused");
itemDialog.hideKB();
showCustomKeyboard(v);
}
else {
hideCustomKeyboard();
}
}
});
//removed extra lines of code
}
请不是SearchResult
是DialogFragment的基本活动和ItemDialog
是我的对话片段。
我所做的是,当用户专注于ListView中的EditText时,onFocusChange
函数会触发,并尝试调用我的Dialog Fragment的hideKB()
函数。不过,我抛出一个NullPointerException:
FATAL EXCEPTION: main
Process: com.agict.marswin, PID: 14038
java.lang.NullPointerException
at UtilityClasses.CustomKeyboard$2.onFocusChange(CustomKeyboard.java:187)
和187线在我CustomKeyboard
是调用从对话片段的功能代码:
itemDialog.hideKB();
而且我不明白为什么我收到因为我在初始化我的itemDialog
之后调用了registerEditText
,因此该行为空指针。我认为我的问题归结为从一个类调用DialogFragment的函数。
任何人都可以帮助我吗?过去6个多小时我一直在为此工作,并且我被卡住了。很感谢任何形式的帮助。谢谢。