如何检测android中的焦点EditText?

时间:2013-06-27 11:29:54

标签: android android-edittext

我的页面中有多个EditText以及两个按钮。我希望用户触摸任意一个EditText字段,然后点击任意按钮,将特定值插入到他触摸的EditText字段中。不允许使用键盘输入。请帮我这样做。

9 个答案:

答案 0 :(得分:51)

您可以使用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

答案 1 :(得分:29)

这对我有用。它返回一个布尔值。

SELECT *
FROM   com140 cm
WHERE  cm.csnstar = 90
AND   ((cm.csnrsncde IN ( 135, 177 )
    AND cm.duedate > (SELECT Max(e.dte1)
                       FROM   events e
                       WHERE  e.ispec = 'FI560'
                       AND e.inrtyp = 'RVP'
                       AND e.trntyp1 = 'RP'
                       AND e.staevt = 55
                       AND e.dte2 > DATE_1) )
    OR (cm.csnrsncde IN (91,98,172)
         AND cm.duedate > DATE1))

答案 2 :(得分:19)

您可以做的一件事是声明一个全局变量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");
                }
            }
        });

    }

它是一个逻辑编码..没有达到标记..如果你找到一个更好的。然后使用它。谢谢。

答案 3 :(得分:7)

让您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事件。

答案 4 :(得分:3)

  

这对我有用。

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") 
      }            
   }
});

答案 5 :(得分:1)

这对我使用 Java 8 (lambdas) 有用:

EditText myEditText = findViewById(R.id.editText);

myEditText.setOnFocusChangeListener((view, hasFocus) -> {
      if(hasFocus){
          Log.e("TAG", "myEditext has focus") 
      }else{
          Log.e("TAG", "myEditext has no focus") 
      }
});

答案 6 :(得分:0)

在您的活动或片段实现OnFocusChangeListener中。

edittextNeme= (EditText) findViewById(R.id.edittextNeme);
edittextNeme.setOnFocusChangeListener(this);

您必须通过view.getId()获取视图ID来检查哪个视图已更改焦点,并相应地处理。

@Override
public void onFocusChange(View view, boolean hasfocus) {
    switch(view.getId()){
    case R.id.edittextNeme:
    //Do something
    break;

    ...etc
    }
}

答案 7 :(得分:0)

使用Java 8 lambda:

EditText editTextTo = findViewById(R.id.editTextTo);

editTextTo.setOnFocusChangeListener((view, b) -> {
    if (view.isFocused()) {
        // Do whatever you want when the EditText is focused 
        // Example:
        editTextFrom.setText("Focused!");
    }
});

请注意,lambda函数内部的视图实际上是EditText的实例。

答案 8 :(得分:0)

简单编码:

if(EditText1.isFocused()){
  //EditText1 is focused
}else if(EditText2.isFocused()){
  //EditText2 is focused
}