获取ListView项目在getView()方法之外的单击位置

时间:2014-05-17 04:36:30

标签: android listview

我的ListView看起来像这样:

enter image description here

..我一直在使用此代码来处理传入的点击事件以开始/停止音乐播放:

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

...

previewBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View view) {
                    boolean isToggled = ((ToggleButton) view).isChecked();
                    Mp3File music = getItem(position);

                    if (!isToggled) {
                        callbackActivity.onMusicPreviewStopped();
                        ((ToggleButton) view).setChecked(false);
                    } else {
                        callbackActivity.onMusicPreviewRequested(music);
                    }
                }
            });
...

哪种效果非常好TBH。但我有这样的习惯,即让类实现所需的接口,而不是为每个创建的视图创建一个新接口。

如果我选择忽略点击项目的position,那就非常直截了当。遗憾的是,我需要position来正确识别哪个Mp3File正在播放并停止播放。

你能否就我如何使其发挥作用提出一些建议?

..或者这是唯一的方法吗?

1 个答案:

答案 0 :(得分:1)

离开我的头顶我建议将位置设置为按钮标签。然后为该类实现onClick一次,并使用v.getTag()检索按钮的位置

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

...
previewBtn.setTag(position);
...


@Override
public void onClick(View view) {
                boolean isToggled = ((ToggleButton) view).isChecked();
                Mp3File music = getItem(view.getTag());

                if (!isToggled) {
                    callbackActivity.onMusicPreviewStopped();
                    ((ToggleButton) view).setChecked(false);
                } else {
                    callbackActivity.onMusicPreviewRequested(music);
                }
            }