Listview中的播放/暂停按钮未更新

时间:2017-08-28 18:30:37

标签: android listview onclicklistener android-button

我是Android新手。我有一个列表视图,它有图像,文本和播放/暂停按钮。当我单击一行中的播放按钮然后单击另一行中的播放按钮时,两个按钮的背景将保持暂停状态。所以我希望当我单击连续播放按钮然后单击另一行中的播放按钮时,第一个按钮的背景应更改为播放,第二个按钮的背景应保持暂停。提前谢谢。

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;
}

}

1 个答案:

答案 0 :(得分: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
}