0

何らかの理由で、「内部」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クラスを作成し、それをimagebuttonにアタッチすると、正常に機能します。

何か案は?どうやら、「内部」(this) OnClickListenerImageButtonに接続すると問題が発生しますが、に接続すると正常に動作し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 {}を削除し、そこにある場合にのみimagebuttonがある場合は、機能します。これは明らかにばかげたエラーですが、理由について説明していただければ幸いです:-)

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

以下のコードを更新してください:-

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 に答える
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 と ImageButton に追加する場合、(Button) v のようなキャストを行う前に、クリックされたオブジェクトが Button か ImageButton かを判断する必要があります。したがって、次のようにする必要があります。

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 に答える