#android #android-activity #setfocus #android-edittext #clickable
#Android #android-активность #setfocus #android-edittext #интерактивно
Вопрос:
У меня есть одно действие с EditText и кнопкой. Когда кнопка нажата, я вызываю
myEditText.setClickable(false);
myEditText.setFocusable(false);
У меня есть другая кнопка, которая при нажатии изменяет активность.
Intent myIntent = new Intent(view.getContext(), DestinationScreen.class);
startActivityForResult(myIntent, 0);
Когда я возвращаюсь из activity2 к своему основному действию, в котором есть EditText, я хочу, чтобы оно восстановило фокус. То есть я хочу иметь возможность вводить в нем некоторые новые значения. Есть идеи, как это возможно?
Я пытался сделать это в своей основной деятельности
startActivityForResult(myIntent, 0);
myEditText = (EditText) findViewById(R.id.textBox);
myEditText.setClickable(true);
myEditText.setFocusable(true);
myEditText.requestFocus();
Похоже, это не работает.
Ответ №1:
Как вы сказали, вы хотели бы, чтобы EditText
восстановил фокус, когда вы вернетесь со второго действия.
Тогда, вероятно, это то, что вам следует попробовать: поскольку вы уже вызываете activity2 с помощью startActivityForResult
метода (requestCode: 0), вы могли бы воспользоваться этим:
Вы должны переопределить
onActivityResult(int requestCode, int resultCode, Intent data)
метод внутри вашего основного действия, проверьте, является ли requestCode == 0
, и если да:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case 0:
EditText myEditText = (EditText) findViewById(R.id.textBox);
myEditText.setClickable(true);
myEditText.setFocusable(true);
myEditText.requestFocus();
default:
break;
}
}
Комментарии:
1. @rekaszeru , я все еще не могу отредактировать текст. Все, что я ввел ранее, все еще видно, и я не могу ничего ввести.
2. Убедитесь, что ваш myEditText инициализирован локально, он не должен быть глобальной переменной
3. Я могу сделать это в своем основном действии после возврата из activity2 b = (Кнопка) findViewById(R.id.code); b.setClickable (true); Я все еще не могу использовать EditText myEditText = (EditText) findViewById(R.id.TextBox); myEditText.setClickable (true); myEditText.setFocusable (true); myEditText. requestFocus(); с хорошим эффектом.
4. Любая помощь? Я все еще не могу его получить.
5. Вы получаете какие-либо исключения? Вызывается ли метод onActivityResult вашего основного действия?
Ответ №2:
Я не просматривал исходный код Android, чтобы проверить это, но симптомы для меня подразумевают, что:
#onActivityResult()
вызывается когда-то раньше#onResume()
, и- для запроса фокуса, вероятно, требуется отображение представления, что пока неверно (поскольку иерархия представлений действия не привязана к его окну, см.
View#isShown()
).
Таким образом, вы можете исправить это, запросив фокус у runnable в главном потоке, который запустится сразу после возобновления действия. В вашем onActivityResult()
определении:
final EditText myEditText = (EditText) findViewById(R.id.textBox);
runOnUiThread(new Runnable() {
@Override
public void run() {
myEditText.requestFocus();
// Also move the cursor to the end
myEditText.setSelection(myEditText.length());
}
});