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类方法创建事件处理程序?
谢谢!
答
您可以如下图所示
<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
}
});
您可以使用其中任何一个。
[如何处理片段中使用XML onClick的按钮点击](http://*.com/questions/6091194/how-to-handle-button-clicks-using-the-xml-onclick-内片段) – SaravInfern