出于某种原因,将“内部”OnClickListener
附加到ImageButton
会导致应用崩溃。对于普通的Button
,它运行正常 - 只有ImageButton
才能崩溃。
public class SomeWidgets extends Activity implements OnClickListener {
....
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
imagebutton = (ImageButton)findViewById(R.id.imagebutton)
imagebutton.setOnClickListener(this);
....
....
}
单击imagebutton
时上面的代码崩溃了。 button1
工作正常,即使两者都以完全相同的方式创建并附加到OnClickListener
。 (这是崩溃它的点击,而不是onClick
处理点击。)
但是,如果我创建一个私有内部OnClickListener
类并将其附加到图像按钮,那么它可以正常工作。
有什么想法吗?显然,将“内部”(this)
OnClickListener
附加到ImageButton
时会出现问题,而将其附加到Button
时则可以正常工作。
public void onClick(View v) {
if (((Button)v).getText().equals("A button")) {
edittext2.setText(edittext1.getText());
edittext1.setText("");
}
if (imagebutton.getId() == R.id.imagebutton) {
Toast.makeText(SomeWidgets.this, "This is an image button.",
Toast.LENGTH_LONG).show();
}
}
它崩溃了。但是,如果我删除第一个if {}并且只有图像按钮,那么它可以工作。这显然是一个愚蠢的错误,但我很欣赏和解释为什么: - )
答案 0 :(得分:1)
尝试
if (((Button)v).getText().toString().equals("A button")) {
edittext2.setText(edittext1.getText().toString());
edittext1.setText("");
}
答案 1 :(得分:0)
此处更改代码
if (v.getId() == R.id.imagebutton) //imagebutton.getId() replace with View v
{
Toast.makeText(SomeWidgets.this, "This is an image button.",
Toast.LENGTH_LONG).show();
}
答案 2 :(得分:0)
崩溃是由imageButton转换为Button造成的,请尝试:
if (v instanceOf ImageButton) {
if (((ImagaeButton)v).getText().toString().equals("A button")) {
编辑: 如果将OnClickListener添加到Button和ImageButon,则必须先确定所点击的对象是Button还是ImageButton,然后再进行类似(Button)v的转换。 所以你必须做类似的事情:
String ButtonText = "";
if (v instanceOf ImageButton) {
ButtonText = ((ImageButton) v).getText().toString();
}else if(v InstanceOf Button){
ButtonText = ((Button) v).getText().toString();
}
答案 3 :(得分:0)
请更新以下代码: -
public void onClick(View v) {
if (v==button1) {
edittext2.setText(edittext1.getText());
edittext1.setText("");
} else if (v==imagebutton) {
Toast.makeText(SomeWidgets.this, "This is an image button.",
Toast.LENGTH_LONG).show();
}
}
答案 4 :(得分:0)
谢谢大家的回答。我不知道如何使用toString()错过了。不知怎的,我陷入了ImageButton,并认为这是问题所在。修复了onClick()中Button的文本检查,修复了所有内容。