У меня есть номер EditText
s на моей странице вместе с двумя кнопками. Я хочу, чтобы пользователь коснулся любого поля EditText
и нажал любую кнопку, чтобы вставить определенное значение в то самое поле , которое он коснулся. Предоставление ввода с клавиатуры невозможно. Пожалуйста, помогите мне сделать это.Как я могу обнаружить сфокусированный EditText в android?
ответ
Одна вещь, которую вы можете сделать, это объявить глобальную переменную evalue
, которая покажет вам, что является last selected EditText
с помощью onTouchListener
, а затем на основе значения evalue
, вы можете установить значение текста в EditText по нажатию кнопки. надеюсь, вы поняли.
код для него может быть следующим:
EditText e1,e2;
Button b1,b2;
String evalue;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
e1=(EditText)findViewById(R.id.editText1);
e2=(EditText)findViewById(R.id.editText2);
b1=(Button)findViewById(R.id.button1);
b2=(Button)findViewById(R.id.button2);
e1.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent arg1)
{
evalue="1";
return false;
}
});
e2.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent arg1)
{
evalue="2";
return false;
}
});
b1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View arg0) {
if(evalue=="1")
{
e1.setText("yes");
}
if(evalue=="2")
{
e2.setText("yes");
}
}
});
b2.setOnClickListener(new View.OnClickListener()
{
public void onClick(View arg0) {
if(evalue=="1")
{
e1.setText("No");
}
if(evalue=="2")
{
e2.setText("No");
}
}
});
}
Его логическое кодирование .. не ДО знака .. если вы найдете лучше. затем используйте его. Спасибо.
Большое спасибо. Это полностью выполнило мое требование. –
Я думаю, вы прибили его. Есть так много других ответов, которые предполагают, что onFocusChange является обязательным событием слушателя. Я думаю, что они делают это, потому что они думают с точки зрения ПК/браузера. Это выглядит правильно. Сенсорные устройства не работают так. Проблема в том, что когда я тестирую эти другие ответы, курсор все еще «мигает» в поле после того, как я касаюсь кнопки. Таким образом, это означает, что фокус все еще находится в полевых условиях, несмотря на обращение к другому элементу интерфейса на экране. Поэтому вы должны обнаружить, что еще было затронуто, а не поле в фокусе.+1 – giulio
// Событие onFocusChange будет работать при перемещении между редактируемыми полями. Трюк пытается понять контекст поведения на сенсорных устройствах с виртуальными клавиатурами. – giulio
Вы можете использовать View.OnFocusChangeListener
, чтобы определить, получил ли какой-либо вид (edittext) или потерял фокус.
for (EditText view : editList){
view.setOnFocusChangeListener(focusListener);
}
....
private OnFocusChangeListener focusListener = new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
focusedView = v;
} else {
focusedView = null;
}
}
}
Это относится к вашей деятельности или фрагменту или в любом месте, где есть EditTexts. ....
просто говорит, что вы можете поместить его в другое место в классе. И, очевидно, вам нужно будет создать массив с ними в нем, таким образом, editList
.
у вас пробовал этот код? если один из входов потерял фокус, а другой получил его, то слушатель будет вызываться дважды. может ли focusView быть null после этого? –
иметь свой Fragment
OnTouchListener
реализовать & OnFocusChangeListener
:
public class AttributesFragment extends Fragment
implements OnTouchListener, OnFocusChangeListener {
Затем осуществить с помощью:
@Override
public boolean onTouch(View view, MotionEvent event) {
if (view instanceof EditText) {
view.setOnFocusChangeListener(this); // User touched edittext
}
return false;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
}
Не забудьте настроить слушателя после создания EditText
editText.setOnTouchListener(this);
Таким образом, если поле EditText
сфокусировано по умолчанию, но пользователь не изменил поле, он не будет запускать событие onFocusChange
.
Это работает для меня. Он возвращает логическое значение.
myEditText.hasFocus()
Это работает для меня.
e1 = (EditText) findViewById(R.id.editText1);
e1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean hasfocus) {
if (hasfocus) {
Log.e("TAG", "e1 focused")
} else {
Log.e("TAG", "e1 not focused")
}
}
});
может быть, вы ищете View.setOnTouchListener – mihail
я на самом деле хочу, чтобы обнаружить целенаправленный вид EditText. –