2014-11-05 81 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