2016-04-16 112 views
-2

我是編程新手,在過去幾個小時試圖解決問題的過程中一直困擾着我的大腦。我知道這是愚蠢的。我試圖讓每個按鈕播放聲音。任何幫助是極大的讚賞。 (由 「進口android.view.View.OnClickListener;」,把我的問題GREEN等到我關IT OUT WITH 「;」 但隨後IMPORT變灰。)OnClickListener是抽象的,不能實例化

公共類PocketParent延伸ActionBarActivity { @Override 保護無效onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

final MediaPlayer stopMP = MediaPlayer.create(this, R.raw.btmg); 
    final MediaPlayer dropMP = MediaPlayer.create(this, R.raw.knock); 
    final MediaPlayer popMP = MediaPlayer.create(this, R.raw.oldsoulwr); 
    final MediaPlayer noMP = MediaPlayer.create(this, R.raw.smpr); 
    final MediaPlayer yeahMP = MediaPlayer.create(this, R.raw.upbeaty); 

    ImageButton playstop = (ImageButton) this.findViewById(R.id.imageButton); 
    ImageButton playdrop = (ImageButton) this.findViewById(R.id.imageButton2); 
    ImageButton playpop = (ImageButton) this.findViewById(R.id.imageButton3); 
    ImageButton playno = (ImageButton) this.findViewById(R.id.imageButton4); 
    ImageButton playyeah = (ImageButton) this.findViewById(R.id.imageButton5); 

(這裏是MY問題在於)OnClickListener是抽象的,不能被實例化。(它也說,這是期待「」 OR「'」權利之前的‘新’,但這並不能工作。)

playstop.setOnClickListener(new View.OnClickListener() 
    playdrop.setOnClickListener(new View.OnClickListener() 
    playpop.setOnClickListener(new View.OnClickListener() 
    playno.setOnClickListener(new View.OnClickListener() 
    playyeah.setOnClickListener(new View.OnClickListener()  { 

     @Override 
     public void onClick(View v) { 
      stopMP.start(); 
      dropMP.start(); 
      popMP.start(); 
      noMP.start(); 
      yeahMP.start(); 
     } 
     }); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    } 
    .... 
} 

}

+0

這對任何準備好幫助實際添加問題的人都會有所幫助。 – tofro

+0

只是看看這個[Stack Overflow的舊討論](http://stackoverflow.com/questions/25905086/multiple-buttons-onclicklistener-android)。 –

回答

2

你不能做到這一點:

playstop.setOnClickListener(new View.OnClickListener() 
playdrop.setOnClickListener(new View.OnClickListener() 
playpop.setOnClickListener(new View.OnClickListener() 
.... 

,因爲這意味着在Java中,要傳遞到playstop方法很多爭論,沒有逗號的分裂,

它會更有意義syntaxically做

playstop.setOnClickListener(new View.OnClickListener()); 
playdrop.setOnClickListener(new View.OnClickListener()); 
playpop.setOnClickListener(new View.OnClickListener()); 
.... 

但你不能做到這一點無論因爲View.OnClickListener接口 和創建View.OnClickListener的對象只是沒有任何意義......

你需要自行實施該匿名所有按鈕上的接口,就像你用playYeah按鈕做的那樣

playyeah.setOnClickListener(new View.OnClickListener()  { 
     @Override 
     public void onClick(View v) { 
      .... 
     } 
     }); 
playstop.setOnClickListener(new View.OnClickListener()  { 
     @Override 
     public void onClick(View v) { 
      .... 
     } 
     }); 
playdrop.setOnClickListener(new View.OnClickListener()  { 
     @Override 
     public void onClick(View v) { 
      .... 
     } 
     }); 
Etc etc 
+0

當單擊任何視圖時,將運行所有方法。這不是預期的行爲(我認爲)。 –

+0

你很明顯在答案中得到了想法....我更關注的是接口必須實現的事實,而不是每個按鈕都必須執行相同的代碼邏輯 –

+0

好吧,無論如何,這是一個更好的答案,現在你編輯後因爲它甚至可以解釋OP的邏輯中出了什麼問題。 –

-2

嘗試更改

ImageButton playstop = (ImageButton) this.findViewById(R.id.imageButton); 
ImageButton playdrop = (ImageButton) this.findViewById(R.id.imageButton2); 
ImageButton playpop = (ImageButton) this.findViewById(R.id.imageButton3); 
ImageButton playno = (ImageButton) this.findViewById(R.id.imageButton4); 
ImageButton playyeah = (ImageButton) this.findViewById(R.id.imageButton5); 

ImageButton playstop = (ImageButton) findViewById(R.id.imageButton); 
ImageButton playdrop = (ImageButton) findViewById(R.id.imageButton2); 
ImageButton playpop = (ImageButton) findViewById(R.id.imageButton3); 
ImageButton playno = (ImageButton) findViewById(R.id.imageButton4); 
ImageButton playyeah = (ImageButton) findViewById(R.id.imageButton5); 

希望能幫助你!