简体   繁体   English

android-处理ListView中的项目单击

[英]android - handle item clicks in ListView

I'm using a ListView to display a Playlist and I use a clickable ImageView to stop/resume playback, currently I'm writing a custom adapter. 我使用ListView显示播放列表,并使用可点击的ImageView停止/继续播放,目前正在编写自定义适配器。 The problem: when I click the ImageView , nothing happens though click events are detected as I can see in the LogCat output. 问题是:当我单击ImageView ,尽管检测到单击事件,但没有发生任何反应,正如我在LogCat输出中看到的那样。 What am doing wrong? 怎么了? Adapter code below 下面的适配器代码

       public class AudioListAdapter extends ArrayAdapter<Playlist> {

Context context;
int layoutResourceId;
Playlist data[] = null;


public AudioListAdapter(Context context, int layoutResourceId,
        Playlist[] data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    PlaylistHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new PlaylistHolder();
        PlaylistHolder.imgBtnPlay = (ImageView) row
                .findViewById(R.id.imgListBtnPlay);
        holder.txtTitle = (TextView) row.findViewById(R.id.tvListItemSong);
        holder.txtArtist = (TextView) row
                .findViewById(R.id.tvListItemArtist);

        Playlist playlist = data[position];
        holder.txtTitle.setText(playlist.Title);
        holder.txtArtist.setText(playlist.Artist);
        PlaylistHolder.imgBtnPlay.setImageResource(playlist.btn);
        PlaylistHolder.imgBtnPlay
                .setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        PlaylistHolder.imgBtnPlay
                                .setBackgroundResource(R.drawable.list_button_pause);
                        Log.e("onClick", "image clicked"); //Click events are detected

                    }
                });

        row.setTag(holder);
    } else {
        holder = (PlaylistHolder) row.getTag();
    }

    return row;
}

static class PlaylistHolder {
    static ImageView imgBtnPlay;
    TextView txtTitle, txtArtist;
}

  }

通过使用setImageRessource()而不是setBackgroundResource()解决了问题,无法解释,但现在可以使用

You can refresh the list using the adaptername.notifyDatasetchanged method..But unfortunatly that will also not work because when click event will be fired list cant get to know which view is clicked. 您可以使用adaptername.notifyDatasetchanged方法刷新列表。但是不幸的是,这也行不通,因为在触发click事件时,列表无法知道单击了哪个视图。 either you can try using item click listener which will provide you the position of clicked item 您可以尝试使用项目点击侦听器,它将为您提供被点击项目的位置

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM