我为什么要使用View参数而不是我想要的?

时间:2010-12-17 19:29:18

标签: android

这是我的简单例子。我在main.xml文件中定义了一个按钮,并在Click'点击button01时调用我的onClickk方法的属性。这很好,但是当我想简单地传递View并且不进行投射时,我不明白为什么我应该通过Button对象。

如果我将按钮作为按钮传递,则点击按钮时应用程序会意外停止。

public class Als extends Activity {

    Button button01; 

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button01 = (Button) findViewById(R.id.Button01);
        button01.setText("something");

    }

    public void onClickk(View button01) {
        Button but = (Button) button01;
        but.setText("Cooool");
    }
}

2 个答案:

答案 0 :(得分:5)

那是因为OnClick事件是View对象的一部分。 Button只是继承/使用它。当框架调用OnClick时,它是调用它的View对象,而不是按钮,因此它传递一个View,然后您需要知道将其强制转换为什么。

答案 1 :(得分:2)

此外,您可以改为执行以下操作,而不是使用故意拼写错误来创建自己的方法:

public class Als extends Activity implements OnClickListener {

    Button button01;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button01 = (Button)findViewById(R.id.Button01);
        button01.setText("something");
        button01.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.button01:
            button01.setText("Cooool");
            break;
        }

        return;
    }
}