2016-10-06 11 views
-3

私はsetOnClickListener(this)を呼び出そうとします。 'this'はエラーになります。私はそれを他のものとして宣言しようとしましたが、うまくいきませんでした。私は複数のonClickイベントを作成しようとしています。setOnclickListener(this)ERROR

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.view.View.OnClickListener; 
import android.view.View; 

public class MainActivity extends Activity { 

ImageButton button; 

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

    ImageButton one = (ImageButton) findViewById(R.id.img1); 
    one.setOnClickListener(this);<-error 

    ImageButton two = (ImageButton) findViewById(R.id.img1); 
    one.setOnClickListener(this);<-error 

    ImageButton three = (ImageButton) findViewById(R.id.img2); 
    two.setOnClickListener(this);<-error 
    } 
public OnClickListener onClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     switch(v.getId()){ 
      case R.id.img1: 
       button.setBackgroundResource(R.mipmap.checkmark); 
       break; 
      case R.id.img2: 
       button.setBackgroundResource(R.mipmap.checkmark); 
       break; 
      case R.id.img3: 
       button.setBackgroundResource(R.mipmap.checkmark); 
       break;  
      } 
     } 
    }; 
} 
+2

エラーメッセージをお読みになりましたか? 'this'は有効なリスナーであると思いますか? – SLaks

+0

'one.setOnClickListener(onClickListener)'にする必要があります。 'two'と同じです。 – Onik

+0

'this'はOnClickListenerを実装していません – Erik

答えて

0

変化にあなたのクラス宣言:

 public class MainActivity extends Activity implements View.OnClickListener { 

     ImageButton button; 

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

      ImageButton one = (ImageButton) findViewById(R.id.img1); 
      one.setOnClickListener(this);<-error 

      ImageButton two = (ImageButton) findViewById(R.id.img1); 
      one.setOnClickListener(this);<-error 

      ImageButton three = (ImageButton) findViewById(R.id.img2); 
      two.setOnClickListener(this);<-error 
      } 

      @Override 
      public void onClick(View v) { 
       switch(v.getId()){ 
        case R.id.img1: 
         button.setBackgroundResource(R.mipmap.checkmark); 
         break; 
        case R.id.img2: 
         button.setBackgroundResource(R.mipmap.checkmark); 
         break; 
        case R.id.img3: 
         button.setBackgroundResource(R.mipmap.checkmark); 
         break;  
        } 
       } 

     } 
+0

私は自分の答えを編集しました。 –

1

使用この:

ImageButton one = (ImageButton) findViewById(R.id.img1); 
one.setOnClickListener(onClickListener); 
2

代わりのthis、あなたすでに作成onClickListenerクラスのメンバを参照します。また、あなたはそれがどんなclicklistenerを取得したり、間違ったリソースIDをターゲットにされていない、あなたの2番目と3番目のIMAGEBUTTONにバグがあり、ここではすべての修正プログラムです

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

    ImageButton one = (ImageButton) findViewById(R.id.img1); 
    one.setOnClickListener(onClickListener); 

    ImageButton two = (ImageButton) findViewById(R.id.img2); 
    two.setOnClickListener(onClickListener); 

    ImageButton three = (ImageButton) findViewById(R.id.img3); 
    three.setOnClickListener(onClickListener); 
} 
0

これを試してみてください。

public class MainActivity extends Activity implements View.OnClickListener 

はちょうどこれを実装それ以外の場合はすべてokです。

関連する問題