为什么这段代码会吐司?没有倾听者

时间:2013-10-28 16:49:07

标签: java android android-toast

我找到了一段用于制作吐司信息的代码。作为一个新的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方法!怎么样?? 请给我一个详细的答案。提前致谢。 :)

4 个答案:

答案 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;
....
}