2017-08-28 86 views
0

我是Android新手。我有一個列表視圖,它有圖像,文本和播放/暫停按鈕。當我單擊一行中的播放按鈕,然後單擊另一行中的播放按鈕時,兩個按鈕的背景都保持暫停狀態。所以我希望當我點擊連續的播放按鈕,然後點擊另一行的播放按鈕時,第一個按鈕的背景應該變爲播放,而第二個背景應該保持暫停。提前致謝。Listview中的播放/暫停按鈕沒有更新

public class MyListAdapter extends ArrayAdapter<String> { 

private String[] gelenurl; 
List<String> gelen_ad; 
public static MediaPlayer mPlayer= new MediaPlayer(); 
private int layout; 

public MyListAdapter(Context context, int resource, List<String> objects, String[] arr) { 
    super(context, resource, objects); 
    layout=resource; 
    gelenurl=arr; 
    gelen_ad=objects; 
} 

@NonNull 
@Override 

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

    final ViewHolder mainViewholder; 

    if(convertView==null) { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView=inflater.inflate(layout, parent, false); 
     mainViewholder= new ViewHolder(); 
     convertView.setTag(mainViewholder); 
    } 

    else { 

     mainViewholder = (ViewHolder) convertView.getTag(); 

    } 

    mainViewholder.img = (ImageView) convertView.findViewById(R.id.list_item_thumbnail); 
    mainViewholder.img.setImageResource(R.drawable.ic_radio); 
    mainViewholder.title = (TextView) convertView.findViewById(R.id.list_item_text); 
    mainViewholder.title.setText(getItem(position)); 
    mainViewholder.button = (ImageButton) convertView.findViewById(R.id.list_item_btn); 
    mainViewholder.button.setImageResource(R.drawable.transparent_play); 
    mainViewholder.button.setBackgroundColor(Color.WHITE); 
    mainViewholder.button.setVisibility(View.VISIBLE); 
    mainViewholder.stop_button = (ImageButton) convertView.findViewById(R.id.list_item_stop_btn); 
    mainViewholder.stop_button.setImageResource(R.drawable.transparent_stop); 
    mainViewholder.stop_button.setBackgroundColor(Color.WHITE); 



    final ViewHolder vh = mainViewholder; 

    vh.stop_button.setVisibility(View.INVISIBLE); 

    mainViewholder.button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      vh.button.setVisibility(View.INVISIBLE); 
      vh.stop_button.setVisibility(View.VISIBLE); 

      try { 

       radioLinks(gelenurl[position]); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 


     public void radioLinks(String city) throws IOException { 

      if(mPlayer.isPlaying()) { 
       mPlayer.stop(); 
       mPlayer.reset(); 
      } 

      mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mPlayer.setDataSource(city); 
      mPlayer.prepareAsync(); 
      mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mp) { 
        mPlayer.start(); 

       } 
      }); 

     } 

    }); 

    mainViewholder.stop_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      vh.button.setVisibility(View.VISIBLE); 
      vh.stop_button.setVisibility(View.INVISIBLE); 
      mPlayer.stop(); 
      mPlayer.reset(); 
     } 
    }); 
    return convertView; 
} 

} 

回答

0

您需要使用成員變量來跟蹤當前正在播放的歌曲。類似private String currentCity = null。在用於播放的onClick處理程序中,您會將其設置爲所選項目,並致電notifyDataSetChanged通知適配器刷新所有內容。裏面的停止回調,你可能需要停藥後設置currentCity = null並再次調用notifyDataSetChanged()

try { 
    currentCity = gelenurl[position]; 
    radioLinks(currentCity); 
    notifyDataSetChanged(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

你想用裏面getView()這些信息來決定顯示什麼。

mainViewholder.img = (ImageView) convertView.findViewById(R.id.list_item_thumbnail); 
mainViewholder.img.setImageResource(R.drawable.ic_radio); 
mainViewholder.title = (TextView) convertView.findViewById(R.id.list_item_text); 
mainViewholder.title.setText(getItem(position)); 
mainViewholder.button = (ImageButton) convertView.findViewById(R.id.list_item_btn); 
mainViewholder.button.setImageResource(R.drawable.transparent_play); 
mainViewholder.button.setBackgroundColor(Color.WHITE); 

... 

if (getItem(position) == currentCity) { 
    // show stop button 
} else { 
    /// show play button 
} 
+0

我真的非常感謝您的回答,我知道這樣做會有效,但我無法正確應用,可能是我在錯誤的地方定義了一些東西 – PinkRabbits