这是我的简单例子。我在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");
}
}
答案 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;
}
}