2013-02-09 2 views
5

Я читал вокруг вопросов о том, как установить объект для фокусировки, однако я не могу найти ответа на то, что я пытаюсь сделать.как заставить фокус редактировать текст

Использование Вкл Фокус Слушатель я сделал следующее:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (Ehour.getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
Ehour.setFocusable(true); 
Ehour.requestFocus(); 


       } 
      } 
     }}); 

Я попытался предложения от должностей последующих:

Я прочитал этот пост, но используя эти предложения, а также, кажется, не работы: How to set focus on a view when a layout is created and displayed?

Моя цель заключается в том, что, когда фокус редактирования текста теряется, мне нужно вернуться к нему, если указанная запись недействительна.

Кроме того, согласно предложению данного Биллом Частица Я также попытался:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (Ehour.getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 

        ((EditText)arg0).requestFocus(); 

       } 
      } 
     }}); 

** EDIT ** Я даже добавил ниже строку перед requestFocus():

((EditText)arg0).setFocusable(true); 

*** EDIT ****

Пробовал с этого поста: Stop EditText from gaining focus at Activity startup

следующие изменения: В макете в заголовке первого макета я добавил:

android:id="@+id/enterdata" 
android:descendantFocusability="beforeDescendants" 
android:focusableInTouchMode="true" 

Тогда в OnChangeFocusListener я это сделал:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (((EditText)arg0).getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
        findViewById(R.id.enterdata).requestFocus(); 
        ((EditText)arg0).setFocusable(true); 
        ((EditText)arg0).setFocusableInTouchMode(true); 
        ((EditText)arg0).requestFocus(); 

       } 
      } 
     }}); 

Однако я все еще получаю такое же поведение, как и раньше, текст редактирования, который фокусируется, остается таким, но текст редактирования, который я хочу, чтобы фокус был направлен на внешний вид, но он не может использоваться, как будто он все еще ждет фокусировки.

*** EDIT ****

Код ниже согласно недавнему сообщению, найденной на StackOverflow, где пользователь, который задал вопрос, испытывает такую ​​же проблему, как и я:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (((EditText)arg0).getText().length()<=0) { 

        Calendar nohour = Calendar.getInstance(); 
        ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
        if (((EditText)arg0).requestFocus()) { 
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
         Emin.clearFocus(); 
         Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        } 


       } 
      } 
     }}); 
+0

Глядя на это сообщение: Http: // StackOverflow.com/questions/1555109/stop-edittext-from-gaining-focus-at-activity-startup Я пробовал ответы, которые я добавлю к своему вопросу – TimCS

+0

Я даже пытался жестко закодировать все текстовые поля редактирования, чтобы очистить сфокусируйтесь и установите для setFocusable и setFocusableInTouchMode значение false, но поведение по-прежнему остается таким же, как будто текст редактирования, на котором я хочу сосредоточиться, сосредоточен, но всякий ввод текста заканчивается текстом редактирования, который пользователь переместит на !!!!! ПОМОГИТЕ!!!! – TimCS

+0

Он появляется в этом сообщении: http: //stackoverflow.com/questions/14327412/set-focus-on-edittext? Rq = 1 у пользователя была такая же проблема, и он не выглядел так, будто он был решен, однако я собираюсь чтобы попробовать, если они будут работать для меня – TimCS

ответ

3

Попробуйте arg0.requestFocus().

Не уверен, что View осуществляет requestFocus() с верхней части головы, поэтому вам, возможно, придется наложить его ... ((EditText) arg0).requestFocus().

+0

сказали в моем вопросе, попробовали, как вы предложили, с теми же результатами, что упоминалось. – TimCS

+0

Поведение двух текстов редактирования кажется мне странным, так как я хочу вернуться назад к сфокусированным взглядам и, кажется, имеет указатель на него, но тот, который фокус переместился, также кажется одним и тем же, даже если я «нажму» обратно в тот, который я хочу использовать редактирующий текст, который он меняет, не является этим – TimCS

+0

Мне кажется, что там похоже, теперь вокруг этого. Поэтому мне придется попытаться выполнить проверки проверки в точке принятия записи вместо проверки на нее в момент, когда пользователь удаляется от поля. Это на Android 2.2, поэтому я не уверен, что он распространяется на 4 – TimCS

0
new OnEditorActionListener(){ 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     editText.requestFocus(); 
     //used ******* return true ****** 
     return **true**; 
    } 
} 
0

У меня была такая же проблема, вот код, который я использовал, чтобы решить:

EditText editText = (EditText) findViewById(R.id.myTextViewId); 
editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

С наилучшими пожеланиями,

Смежные вопросы