0

出于某种原因,将“内部”附加OnClickListenerImageButton应用程序会使应用程序崩溃。对于正常Button的 s 它工作正常 - 只有它才会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);
    ....
    ....
}

上面的代码在点击时崩溃imagebuttonbutton1工作正常,即使两者都是以OnClickListener完全相同的方式创建和附加到的。(是点击导致它崩溃,而不是onClick点击的处理。)

但是,如果我创建一个私有内部OnClickListener类并将其附加到图像按钮,那么它工作正常。

有任何想法吗?显然,将“内部”附加到 a 时出现问题(this) OnClickListenerImageButton而将其附加到 a 时工作正常Button

编辑:看起来我发现了问题。如果我像这样覆盖 onClick:

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{} 并且只有图像按钮存在,它就可以工作。这显然是一个愚蠢的错误,但我很感激并解释为什么:-)

4

5 回答 5

1

尝试

if (((Button)v).getText().toString().equals("A button")) {
  edittext2.setText(edittext1.getText().toString());
  edittext1.setText("");
}
于 2012-06-04T14:29:33.290 回答
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();
   }
于 2012-06-04T14:33:34.133 回答
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();
}
于 2012-06-04T14:37:08.963 回答
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();
   }
}
于 2012-06-05T06:25:55.997 回答
0

谢谢,所有回答的人。我看不出我怎么会错过使用 toString()。不知何故,我赶上了 ImageButton 并认为这是问题所在。修复 onClick() 中按钮的文本检查修复了所有问题。

于 2012-06-06T09:22:24.373 回答