Android Studio中的匿名类甚至监听失败

问题描述:

我在Java代码中设置的事件侦听器两个按钮和事件监听器的EditText控制:Android Studio中的匿名类甚至监听失败

public void doNewButtonClick(View view) { 
    View.OnClickListener onSnap = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      TextView calculatorTextView = (TextView) findViewById(R.id.textView); 
      calculatorTextView.setText("GO TO SLEEP"); 
      Log.d(TAG, "In the Handler for NEW BUTTONS"); 

     } 
    }; 
    Button button1 = (Button) findViewById(R.id.buttonA); 
    Button button2 = (Button) findViewById(R.id.buttonB); 


    button1.setOnClickListener(onSnap); 
    button2.setOnClickListener(onSnap); 

} 

public void onEditTextInput(View view){ 
    EditText myMessage = (EditText) findViewById(R.id.userText); 
    myMessage.setOnEditorActionListener(new OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView textView, int actionID, KeyEvent event) { 
      Log.d(TAG, "BEFORE THE SEND"); 
      EditText userMessage = (EditText) textView; 
      TextView phone = (TextView)findViewById(R.id.textView2); 

      if(actionID == EditorInfo.IME_ACTION_GO){ 
       Log.d(TAG, "IN THE SEND"); 
       phone.setText(userMessage.getText()); 
      } 
      return false; 
     } 
    }); 
} 

这是我的xml:

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/buttonA" 
     android:layout_below="@+id/button6" 
     android:layout_toLeftOf="@+id/button6" 
     android:layout_toStartOf="@+id/button6" 
     android:layout_marginTop="119dp" 
     android:drawableLeft="@drawable/abc_ic_star_black_16dp" /> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/buttonB" 
     android:layout_alignBottom="@+id/buttonA" 
     android:layout_alignRight="@+id/button6" 
     android:layout_alignEnd="@+id/button6" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/userText" 
     android:layout_above="@+id/buttonB" 
     android:layout_alignLeft="@+id/buttonA" 
     android:layout_alignStart="@+id/buttonA" 
     android:imeOptions="actionGo" 
     android:inputType="text" 
     android:layout_alignRight="@+id/buttonB" 
     android:layout_alignEnd="@+id/buttonB" /> 

我有两个问题: 1)事件处理程序不起作用,除非我也进入控件的属性并将OnClick属性设置为所需的方法。换句话说,我将多次点击一个控件,除非将OnClick属性设置为一个函数,否则什么都不会发生,那么控件及其事件处理程序按预期工作。

2)将每个控件的OnClick属性设置为所需的事件处理函数(回调函数),这迫使我不得不单击控件两次以使其工作。这是因为我设置了OnClick属性并在事件处理函数中定义了OnClick函数。

为什么我的事件处理程序没有响应?为什么我必须设置OnClick属性?我是否强迫设置OnClick属性,而不是使用Anonymous类方法创建事件处理程序?

谢谢!

+0

[如何处理片段中使用XML onClick的按钮点击](http://*.com/questions/6091194/how-to-handle-button-clicks-using-the-xml-onclick-内片段) – SaravInfern

您可以如下图所示

<Button 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/buttonB" 
    android:onClick="doNewButtonClick" //<--- Like this 
    android:layout_alignBottom="@+id/buttonA" 
    android:layout_alignRight="@+id/button6" 
    android:layout_alignEnd="@+id/button6" /> 

按钮简单使用的onClick财产,你的方法将是

public void doNewButtonClick(View v){ 
    // you can handle different views based on the 
    //'id' you get v.getId() and handle different functionalities for each button. 
} 

或者干脆

Button btn = (Button) findViewById(R.id.mybutton); 

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // do anything 
    } 
}); 

您可以使用其中任何一个。