在自定义适配器的列表项的子视图上单击侦听器

时间:2013-08-01 11:19:45

标签: android android-listview onclicklistener baseadapter android-adapter

我使用baseadapter类的getview方法将数据填充到listview中。它工作得很好。我在每个列表项目中都有一个相对布局,通过它我可以播放一个音频文件。我在getview方法中使用onclicklistener,如下所示。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View vi = convertView;

    if (convertView == null)
        vi = inflater.inflate(R.layout.chatbubbles_listrow, null);
    context = parent.getContext();

    TextView date = (TextView) vi.findViewById(R.id.date);
    RelativeLayout playaudio = (RelativeLayout) vi
            .findViewById(R.id.audio_image);
    HashMap<String, String> events = new HashMap<String, String>();
    events = data.get(position);
    final String restype = events.get(Conversation.TAG_USERTYPE);
    audiopath = events.get(Conversation.TAG_AUDIOPATH);
    playaudio.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            stopPlayBack();
            Toast.makeText(context, audiopath, Toast.LENGTH_SHORT).show();
            Log.e("On Click path", audiopath);
            new LoadChats().execute();
        }
    });

     date.setText(restype + audiopath);
    return vi;
}

我的列表视图显示正确的所有信息,但是当我点击相对布局然后播放正确的音频播放但是当我点击另一个相对布局时,同样的音频再次播放是错误的。每个列表项都有自己必须播放的音频路径,但这里只播放一个较早播放的音频。我知道问题出在playaudio的onClicklistner上,但我没有遇到问题。它让我大吃一惊。请帮忙。

提前致谢

1 个答案:

答案 0 :(得分:2)

Log.e(“On Click path”,audiopath);

- 是最后一次充气的视图的音频路径。

您需要从点击的视图中获取音频路径。

playaudio.setTag(audiopath); //重要

    @Override
    public void onClick(View v) {
        stopPlayBack();
        String pathOfAudio = String.valueOf(v.getTag());
        Toast.makeText(context, pathOfAudio, Toast.LENGTH_SHORT).show();
        Log.e("On Click path", pathOfAudio);
        new LoadChats().execute(); // In aynctask use pathOfAudio - path to be played
    }
});

 date.setText(restype + audiopath);
return vi;

}