Del*_*ens 7 android android-edittext android-fragments
很抱歉再次询问此事的帮助,但所有其他帖子都没有帮助.
这是场景:我有一个Acivity('A'),它包含一个带有片段的Layout.此片段在用户输入上交换.其中一个片段里面有一个edittext,我想把重点放在创作上并显示该死的软键盘.所以,在我使用的片段的onCreateView()中:
                mEt = (EditText) v.findViewById(R.id.et);
                mEt.setImeOptions(EditorInfo.IME_ACTION_DONE);
                mEt.requestFocus();
因此,它第一次工作,但如果片段被替换并在以后重新创建,它会获得焦点,但键盘不会出现.
在片段被破坏之前我试图隐藏键盘:
        InputMethodManager keyboard = (InputMethodManager)
        ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
        keyboard.hideSoftInputFromWindow(et.getWindowToken(), 0);
或通过以下方式明确显示键盘:
            InputMethodManager keyboard = (InputMethodManager)
                ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.showSoftInput(et, 0);
但是(正如你可以想象我在这里发布的事实:)),问题仍然存在.
我也绝望地想到了一个活动/片段问题,并且在活动中使用与听众相同的技术,没有运气.
很沮丧,请帮忙:)
tsm*_*ith 16
我刚刚解决了这个问题.我们有一个活动,它将多个片段换成了需要焦点和键盘的文本字段.
有两种方法可以解决这个问题,我和他一起玩这两种方法.这是我最终采用的方法.
@Override
private View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...
    if (savedInstanceState != null && !savedInstanceState.isEmpty()){
      msDialogMessage = savedInstanceState.getString(STATE_DAILOG_MSG);
    } else{
      Utils.setKeyboardFocus(mEditTextUserName);
    }
    ...
}
 /**
  * Used to set focus and show keyboard (if needed) for a specified text field
  * @author Ty Smith
  * @param primaryTextField
  */
 public static void setKeyboardFocus(final EditText primaryTextField) {
   (new Handler()).postDelayed(new Runnable() {
     public void run() {
       primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
       primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
     }
   }, 100);
 }
虽然如果你的片段不好玩且生命周期方法没有正确调用,你可能会考虑我的另一种方式.
我不会发布代码,只是将抓取焦点方法放在自定义侦听器中,并在将片段放到前面时从活动中调用它.
| 归档时间: | 
 | 
| 查看次数: | 7212 次 | 
| 最近记录: |