2015-04-30 65 views
0

我试图在单击EditText时始终调用某个函数。问题是,如果我实现了onClick,那么在第一次单击EditText时,onClick不会被调用,并且当我添加onFocusChange来修复此问题时,之后添加到相同EditText的侦听器似乎不起作用。用户还应该能够在对焦或点击后键入EditText。 OnTextChanged不是一个选项。你甚至可以有两个这样的听众吗?Android onFocusChange AND onClickListener

我在onCreateView中设置receiverEditText变量,并在onResume中调用addListeners。

的Java:

public void addListeners() 
    { 
     receiverEditText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       doTheThingFunction(); 
      } 
     }); 

     View.OnFocusChangeListener listener = new View.OnFocusChangeListener() 
     { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) 
      { 
       doTheThingFunction(); 
      } 
     }; 
     receiverEditText.setOnFocusChangeListener(listener); 
    } 

XML:

<EditText 
      android:id="@+id/messageReceiver" 
      android:layout_width="match_parent" 
      android:layout_height="35dp" 
      android:padding="3dp" 
      android:hint="@string/recipient" 
      android:focusableInTouchMode="true" 
      android:focusable="true"> 
      <requestFocus /> 
</EditText> 

回答

1

@Waltari我已创建演示,以检查对焦一些edittextview的状态。 检查代码。

在活动的onCreate()中使用它。

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

     messageReceiver.setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        Toast.makeText(getApplicationContext(), "Focus gained", 1) 
          .show(); 
       } else { 
        Toast.makeText(getApplicationContext(), "Focuse released", 
          1).show(); 
       } 
      } 
     }); 

在你XML文件

<EditText 
     android:id="@+id/messageReceiver" 
     android:layout_width="match_parent" 
     android:layout_height="35dp" 
     android:hint="recipient" 
     android:padding="3dp" > 
    </EditText> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="35dp" 
     android:hint="recipient" 
     android:padding="3dp" > 
    </EditText> 

这让我专注的messageReceiver的增益释放事件。

当您在ID为“messageReceiver”的Edittext上显示光标,并且点击另一个编辑文本而不是调用“messageReceiver”发布的焦点时,将获得焦点。

所以这意味着你必须在工作完成时管理焦点发布。

+0

我试过你的代码,但它仍然无法与onClick监听器一起使用。我还想调用onClick监听器上的函数以及onFocus更改。 – Waltari

+0

我可以知道你为什么要在Edittext框上点击监听器吗?你可以使用textWatcher。 –

+0

您可以调用您想在onClick上执行的聚焦增益功能。 –