2014-11-05 85 views
0

我想更改與onClick相關的圖像ImageButton。我試圖像這樣做,但它不工作:更改imagebutton資源onclick

ImageButton play; 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View vi = convertView; 
    if (vi == null) 
     vi = inflater.inflate(R.layout.listview_row, null); 
    play = (ImageButton) vi.findViewById(R.id.imagePlay); 

    play.setImageResource(R.drawable.play); 
    play.invalidate(); 

     play.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(isPlaying){ 
        mMediaPlayer.stop(); 
        mMediaPlayer.release(); 
        mMediaPlayer = null; 
        play.setImageResource(R.drawable.play); 
        play.invalidate(); 
        isPlaying = false; 
       } 
       else{ 
        mMediaPlayer = MediaPlayer.create(context, songs[position]);     
        mMediaPlayer.start(); 
        isPlaying = true; 
        play.setImageResource(R.drawable.pause); 
        play.invalidate(); 

        mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

         public void onCompletion(MediaPlayer mp) { 
          isPlaying = false; 
          play.setImageResource(R.drawable.play); 
          play.invalidate(); 

         } 
        }); 
       } 
      } 
     }); 

這種方式,保持圖像的播放按鈕和暫停按鈕永遠不會改變。我該如何解決這個問題?

+0

你是什麼意思,當你說onCompletion()不起作用? 圖像沒有改變嗎? 或者onComplete()從來沒有被調用過? – Robbe 2014-11-06 11:15:06

回答

0

您已在您的getView方法之外定義了ImageButton play。隨着你添加的每一行,你正在爲它分配一個新的ImageButton(添加的行中的一個)。

當您的onClick(View v)方法被觸發時,play是添加的最後一個按鈕。因此,在onClick()方法中首先將您點擊的按鈕分配給play

ImageButton play; 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

     // SAME 

     play.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       play = (ImageButton) v.findViewById(R.id.imagePlay); 

       if(isPlaying){ 
        // SAME 
       } 
       else{ 
        // SAME 
       } 
      } 
     }); 
+0

謝謝,它工作正常,但這種方式onCompletion()仍然不會更改分配的資源。可以修復它嗎? – 2014-11-06 08:43:06

0

現在播放/暫停按鈕工作,但我想,一旦媒體播放器停止播放,播放圖標被恢復。這種方式onCompletion()不起作用。我如何得到它的工作?

play.setImageResource(R.drawable.play); 
     play.invalidate(); 

     play.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       play = (ImageButton) v.findViewById(R.id.imagePlay); 

       if(isPlaying){ 
         mMediaPlayer.stop(); 
         mMediaPlayer.release(); 
         mMediaPlayer = null; 
         play.setImageResource(R.drawable.play); 
         play.invalidate(); 
         isPlaying = false; 
       } 
       else{ 
        mMediaPlayer = MediaPlayer.create(context, songs[position]);     
        mMediaPlayer.start(); 
        isPlaying = true; 
        play.setImageResource(R.drawable.stop); 
        play.invalidate(); 

        mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

         public void onCompletion(MediaPlayer mp) { 
          isPlaying = false; 

          play.setImageResource(R.drawable.play); 
          play.invalidate(); 
         } 
        }); 
       } 
      } 
     }); 
+0

你應該把它作爲你的問題的編輯,並刪除這個答案。 – Robbe 2014-11-06 11:13:32