How can I detect focused EditText in android?

前端 未结 8 1039
轮回少年
轮回少年 2020-12-05 06:24

I have a number of EditTexts in my page along with two buttons. I want the user to touch on any one EditText field and click any button to insert a

相关标签:
8条回答
  • 2020-12-05 06:58

    One thing that you can do is declare a global variable evalue which will tell you which is the last selected EditText by using onTouchListener and then based on the value of evalue, you can set the text value to the edittext by button click. hope you understood.

    the code for it can be as follow:

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

    Its a logical coding.. not upto the mark.. if you find a better one. then use it. thank you.

    0 讨论(0)
  • 2020-12-05 07:07

    This works for me. It returns a boolean.

    myEditText.hasFocus()
    
    0 讨论(0)
  • 2020-12-05 07:09

    Have your Fragment implement OnTouchListener & OnFocusChangeListener:

    public class AttributesFragment extends Fragment 
                           implements OnTouchListener, OnFocusChangeListener {
    

    Then implement using:

    @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) {
    
    }
    

    Don't forget to set your listener after creating your EditText

    editText.setOnTouchListener(this);
    

    This way if an EditText box is focused by default but user has not changed the field it will not fire the onFocusChange event.

    0 讨论(0)
  • 2020-12-05 07:12

    In your activity or fragment implement OnFocusChangeListener.

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

    You will have to check which view changed focus by getting the view id with view.getId() and handle accordingly.

    @Override
    public void onFocusChange(View view, boolean hasfocus) {
        switch(view.getId()){
        case R.id.edittextNeme:
        //Do something
        break;
    
        ...etc
        }
    }
    
    0 讨论(0)
  • 2020-12-05 07:13

    With Java 8 lambdas:

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

    Note that the view inside the lambda function is actually an instance of an EditText.

    0 讨论(0)
  • 2020-12-05 07:17

    This worked for me.

    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") 
          }            
       }
    });
    
    0 讨论(0)
提交回复
热议问题