我的布局中有一个EditText和一个Button。在编辑字段中写入并单击此按钮到go back my fragment后,我想隐藏虚拟键盘。我假设有一个简单的方法,但我尝试了一些方法,但它不起作用:
该代码显示了Button的工作原理:
private void onButtonClicked(){
getActivity().getSupportFragmentManager().popBackStack();
}
这是一些解决方案的代码,但这无济于事。此代码i使用hideSoftInputFromWindow,但当我调用"edittext.getWindowToken()"时,它不会隐藏软键盘(我还将0值更改为inputmethodmanager.hide_implicit_only或inputmethodmanager.hide_not always且不工作):
EditText myEditText = (EditText) findViewById(R.id.myEditText);
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
有了这个代码,在这个应用程序的另一个屏幕上,它就工作了。这个屏幕是一个活动,所以我认为问题是fragment的问题。
我的片段代码:
public class ChangeEmailFragment extends BaseFragment {
private TextView mTxtCurrentEmail;
private EditText mEdtNewEmail;
private EditText mEdtPassword;
private TextView mTxtSubmit;
@Override
public void onStop() {
super.onStop();
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
if (dialog != null && dialog.isShowing())
dialog.dismiss();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_change_email, container,
false);
mTxtCurrentEmail = (TextView) view.findViewById(R.id.current_email);
mEdtNewEmail = (EditText) view.findViewById(R.id.edit_email);
mEdtPassword = (EditText) view.findViewById(R.id.edit_password);
mTxtSubmit = (TextView) view.findViewById(R.id.button_submmit);
return view;
}
private void showErrorDialog(String msg) {
Builder builder = new Builder(getActivity());
builder.setTitle(getString(R.string.fg_change_email_dialog_error_title));
builder.setMessage(msg);
builder.setNegativeButton(getText(R.string.common_ok), null);
dialog = builder.create();
dialog.show();
}
}
我的活动代码:
@Override
public void onStop() {
super.onStop();
InputMethodManager imm = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEdtUserName.getWindowToken(), 0);
}
发布你的Fragment代码
这是我的片段代码public static ChangeEmailFragment newInstance() { ChangeEmailFragment changeEmailFragment = new ChangeEmailFragment(); return changeEmailFragment; },因为它太长了,所以我将在下一条评论中发布它。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_change_email, container, false); mTxtCurrentEmail = (TextView) view.findViewById(R.id.current_email); mEdtNewEmail = (EditText) view.findViewById(R.id.edit_email); mEdtPassword = (EditText) view.findViewById(R.id.edit_password); mTxtSubmit = (TextView) view.findViewById(R.id.button_submmit); return view; }
@我们会在你的问题中发布你的所有代码。这是什么?
我使用的建议是code,但我不能发布我的格式化代码。所以,请教我怎么做。非常感谢。
在这种方式,Fragmenttry
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
这对我很有用。谢谢您!所以我理解当我的光标放在fragment上时,我必须在fragment中调用hideSoftInputFromWindow,而不是activity。对吗?
@在风中,你是准确的。