Ответ 1
Попробуйте arg0.requestFocus()
.
Не уверен, что View
реализует requestFocus()
с верхней части головы, поэтому вам, возможно, придется наложить его... ((EditText) arg0).requestFocus()
.
Я читал вокруг вопросов о том, как установить объект для фокусировки, но я не могу найти ответа на то, что я пытаюсь сделать.
Используя прослушиватель On Focus, я сделал следующее:
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();
}
}
}});
Я пробовал предложения из следующих сообщений:
Я прочитал этот пост, но использование этих предложений также не работает: Как настроить фокус на просмотр при создании и отображении макета?
Моя цель состоит в том, что, когда фокус редактирования текста теряется, мне нужно вернуться к нему, если указанная запись недействительна.
Кроме того, согласно предложению Билла Мота, я также попытался:
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();
}
}
}});
** РЕДАКТИРОВАТЬ ** Я даже добавил нижнюю строку перед requestFocus():
((EditText)arg0).setFocusable(true);
*** ИЗМЕНИТЬ ****
Пробовал из этого сообщения: Остановить EditText от получения фокуса при запуске Activity
Следующие изменения: В макете в первом заголовке макета я добавил:
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();
}
}
}});
Тем не менее, я по-прежнему получаю то же поведение, что и раньше, текст редактирования, который сосредоточен на этом, остается таким, но текст редактирования, который я хочу, чтобы фокус был направлен на внешний вид, но он не может использоваться, как будто он по-прежнему ожидая фокусировки.
*** ИЗМЕНИТЬ ****
Код ниже в соответствии с недавним сообщением, найденным в 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();
}
}
}
}});
Попробуйте arg0.requestFocus()
.
Не уверен, что View
реализует requestFocus()
с верхней части головы, поэтому вам, возможно, придется наложить его... ((EditText) arg0).requestFocus()
.
new OnEditorActionListener(){
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
editText.requestFocus();
//used ******* return true ******
return **true**;
}
}
У меня была эта же проблема, вот код, который я использовал для решения:
EditText editText = (EditText) findViewById(R.id.myTextViewId);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
С наилучшими пожеланиями,