我在Android中构建的UI表单中遇到了问题.
在那种形式中,我有一些编辑文本,用户必须触摸它们才能打开对话框片段.在对话框片段中,用户可以设置一个值,然后,该值显示在触摸的edittext上.问题如下:当用户关闭对话框片段并且触摸的edittext获得焦点时,如果用户按下后退按钮熄灭,则不会调用onBackpressed()方法.
我必须澄清,打开对话框片段的edittexts不会显示键盘,因为用户无法在其上书写.我不想使用textvIEws.
在这里,我向您展示部分布局:
<linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:orIEntation="vertical"> .... <androID.support.design.Widget.TextinputLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ID="@+ID/text_input_when" androID:layout_margintop="30dp"> <EditText androID:hint="@string/meeting_when" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ID="@+ID/edit_text_when" androID:textSize="18sp" androID:inputType="text|date" androID:textIsSelectable="true" androID:focusable="true" androID:drawableleft="@drawable/ic_black_18dp" androID:drawableStart="@drawable/ic_black_18dp" androID:drawablepadding="10dp" androID:onClick="onEditTextWhenClicked" androID:nextFocusForward="@+ID/edit_text_time"/> </androID.support.design.Widget.TextinputLayout> <androID.support.design.Widget.TextinputLayout androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:ID="@+ID/text_input_time" androID:layout_margintop="30dp"> <EditText androID:hint="@string/meeting_time" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ID="@+ID/edit_text_time" androID:textSize="18sp" androID:inputType="time" androID:textIsSelectable="true" androID:nextFocusForward="@+ID/edit_text_place" androID:focusable="true" androID:drawableleft="@drawable/ic__black_18dp" androID:drawableStart="@drawable/ic__black_18dp" androID:drawablepadding="10dp" androID:onClick="onEditTextTimeClicked" /> </androID.support.design.Widget.TextinputLayout>........</linearLayout>
因此,例如,如果用户触摸“when”编辑文本,则会打开一个datepicker对话框:
当用户设置日期时,关闭对话框片段并在编辑文本上设置值
现在,如果用户按下后退按钮,则无效.
在我的活动中
@OverrIDepublic voID onBackpressed(){ if ( !areAllFIEldEmpty() ) { showAlertCloseDialog(); }else super.onBackpressed();}
但这些方法并没有被称为.
.
我对如何解决它一无所知.请帮我.如果您需要更多信息,请告诉我.谢谢.
解决方法:
在视图中按下硬件键时,在片段中注册要调用的回调:
if (mLayout != null) { mLayout.setFocusableIntouchMode(true);}mLayout.setonKeyListener(new VIEw.OnKeyListener() { @OverrIDe public boolean onKey(VIEw v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { getActivity().onBackpressed(); return true; } return false; }});
如果它是后退键,请返回并使用返回true的事件,否则返回false.
如果你有背部和键盘override onKeyPreIme()extending your EditText的麻烦:
@OverrIDepublic boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // User has pressed Back key. So hIDe the keyboard inputMethodManager mgr = (inputMethodManager) mContext.getSystemService(Context.input_METHOD_SERVICE); mgr.hIDeSoftinputFromWindow(this.getwindowToken(), 0); // HIDe your vIEw as you do it in your activity } else if (keyCode == KeyEvent.KEYCODE_MENU) { // Eat the event return true; } return false;}
总结 以上是内存溢出为你收集整理的android – onBackPressed在我从对话框片段返回并且编辑文本获得焦点时不会调用全部内容,希望文章能够帮你解决android – onBackPressed在我从对话框片段返回并且编辑文本获得焦点时不会调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)