【问题标题】:Play/pause buttons in Listview are not updatingListview 中的播放/暂停按钮未更新
【发布时间】:2018-02-06 02:16:42
【问题描述】:

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

}

【问题讨论】:

    标签: android listview onclicklistener android-button


    【解决方案1】:

    您将希望使用成员变量跟踪当前正在播放的歌曲。像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
    }
    

    【讨论】:

    • 非常感谢您的回答,我知道这会起作用但我无法正确应用它,可能我在错误的地方定义了一些东西
    猜你喜欢
    • 2016-08-13
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多