如果当前正在关注edittext并且用户在DialogFragment外部单击; 我希望屏幕键盘消失.当DialogFragment以这种方式被解雇时,我可以让它工作:
InputMethodManager imm;
public View onCreateView(LayoutInflater inflator, ViewGroup container,
Bundle savedInstanceState) {
imm = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
...}
@Override
public void dismiss(){
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
super.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试通过触摸对话片段之外取消它时同样的事情,它将无法工作.我试图通过覆盖onCancel来做到这一点:
@Override
public void onCancel(DialogInterface dialog){
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
super.onCancel(dialog);
}
Run Code Online (Sandbox Code Playgroud)
当外部触摸事件发生时调用该函数,但不删除键盘.
AlertDialog.Builder load_alert = new AlertDialog.Builder(this);
File list = new File("data/data/project/databases/");
if(!list.exists() || !list.isDirectory()){
return;
}
String [] fileList = list.list();
load_alert.setMessage("Please select");
load_alert.setItems(fileList, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast toast = Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG);
toast.show();
}
});
load_alert.show();
Run Code Online (Sandbox Code Playgroud)
这应该将我的数据库文件夹的内容显示为alertdialog.我检查了fileList数组,并且正在填充它.由于某种原因,它不是通过setItems显示.有任何想法吗?