我找到了一段用于制作吐司信息的代码。作为一个新的Android开发人员,我知道,我们有一个监听器来使按钮工作。但这里没有听众。那么为什么这段代码有用呢?
public class MainActivity extends Activity {
private String mButtonMessageTemplate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButtonMessageTemplate=getString(R.string.button_messege_template);
}
public void showButtonText(View clickedButton){
Button button=(Button) clickedButton;
CharSequence text=button.getText();
String message=String.format(mButtonMessageTemplate, text);
showToast(message);
}
public void showToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
另一个问题是
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hi_button_lebel"
android:onClick="showButtonText"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bye_button_lebel"
android:onClick="showButtonText" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/yo_button_lebel"
android:onClick="showButtonText" />
android:onClick =“showButtonText”这是使用非onClickListener方法!怎么样?? 请给我一个详细的答案。提前致谢。 :)
答案 0 :(得分:1)
android:onClick="showButtonText"
这是你的倾听者。单击该视图时,将执行showButtonText方法。
这是xml代码中的View.OnClickListener。当它被编译时,它将变成你最终的Java代码。
注意:在xml代码中放置onclickListener是一个坏习惯。你应该做的是:
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener(){
public void onclick(View v){
//do what happens on click of button1
showToast("button1 clicked.");
}
});
答案 1 :(得分:0)
Android允许您使用android:onClick
属性自动创建一个在Activity
类中调用该方法的侦听器。
该方法必须接收类型为View
的参数才能使其生效。
答案 2 :(得分:0)
所有按钮都设置onClick属性以调用方法
showButtonText(View clickedButton)
此方法中有一条语句用于显示吐司。
showToast(message);
因此,每次点击任何按钮时,都会显示吐司。
答案 3 :(得分:0)
以下是View.java中的代码 如果一个视图有&#34; onClick&#34;属性,View的构造函数创建并注册&#34; OnClickListener&#34;。
public View(Context context, AttributeSet attrs, int defStyle) {
....
case R.styleable.View_onClick:
if (context.isRestricted()) {
throw new IllegalStateException("The android:onClick attribute cannot "
+ "be used within a restricted context");
}
final String handlerName = a.getString(attr);
if (handlerName != null) {
setOnClickListener(new OnClickListener() {
private Method mHandler;
public void onClick(View v) {
if (mHandler == null) {
try {
mHandler = getContext().getClass().getMethod(handlerName,
View.class);
} catch (NoSuchMethodException e) {
int id = getId();
String idText = id == NO_ID ? "" : " with id '"
+ getContext().getResources().getResourceEntryName(
id) + "'";
throw new IllegalStateException("Could not find a method " +
handlerName + "(View) in the activity "
+ getContext().getClass() + " for onClick handler"
+ " on view " + View.this.getClass() + idText, e);
}
}
try {
mHandler.invoke(getContext(), View.this);
} catch (IllegalAccessException e) {
throw new IllegalStateException("Could not execute non "
+ "public method of the activity", e);
} catch (InvocationTargetException e) {
throw new IllegalStateException("Could not execute "
+ "method of the activity", e);
}
}
});
}
break;
....
}