如何确定在具有自定义布局的 ListView 中单击了哪个视图

How to determine which View was clicked in a ListView with custom layout

我有一个自定义 ListView,它有一个带有几个视图的自定义布局。 我可以在 onItemClick() 方法中检查点击了哪些视图吗? 我搜索并找到了一种解释,但对我帮助不大。

这是自定义视图:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mHolder;
    if(convertView != null){
        mHolder = (ViewHolder)convertView.getTag();
    }else{
        mHolder = new ViewHolder();
        convertView = mLayoutInflater.inflate(R.layout.view_video_item,null);
        mHolder.mVideoThumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
        mHolder.mVideoTitle = (TextView)convertView.findViewById(R.id.video_title);
        mHolder.mVideoFavorite = (ImageView)convertView.findViewById(R.id.video_favorite);
        convertView.setTag(mHolder);
    }
    //Setting the data
    SearchResult result = mVideoList.get(position);
    mHolder.mVideoTitle.setText(result.getSnippet().getTitle());

    //Loading the image
    Picasso.with(mActivity).load(result.getSnippet().getThumbnails().getMedium().getUrl()).into(mHolder.mVideoThumbnail);

    return  convertView;
}

private class ViewHolder{
    private TextView mVideoTitle = null;
    private ImageView mVideoThumbnail = null;

    //Testing
    private ImageView mVideoFavorite = null;
}

我需要知道 mVideoFavorite 是否在这个方法中被点击:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    SearchResult result = (SearchResult)parent.getItemAtPosition(position);
    VIDEO_ID = result.getId().getVideoId();
    Intent videoIntent = YouTubeStandalonePlayer.createVideoIntent(this, AppConstants.KEY, VIDEO_ID);
    startActivity(videoIntent);
}

知道怎么做吗?

如果您发布了自定义列表视图代码,那就太好了。

基本上,您需要做的是,通过设置其 xml 值使图像视图捕获 onClick 事件:

android:clickable="true"

在名为 "mVideoFavorite" 的 imageView 的自定义布局中进行设置后,您必须在自定义适配器的 getView 方法中实现其 onClick 方法,如下所示:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mHolder;
if(convertView != null){
    mHolder = (ViewHolder)convertView.getTag();
}else{
    mHolder = new ViewHolder();
    convertView = mLayoutInflater.inflate(R.layout.view_video_item,null);
    mHolder.mVideoThumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
    mHolder.mVideoTitle = (TextView)convertView.findViewById(R.id.video_title);
    mHolder.mVideoFavorite = (ImageView)convertView.findViewById(R.id.video_favorite);
    mHolder.mVideoFavorite.setOnClickListener(new OnClickListener() {
@Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            // do your stuff
        }
    });
    convertView.setTag(mHolder);
}
//Setting the data
SearchResult result = mVideoList.get(position);
mHolder.mVideoTitle.setText(result.getSnippet().getTitle());

//Loading the image
Picasso.with(mActivity).load(result.getSnippet().getThumbnails().getMedium().getUrl()).into(mHolder.mVideoThumbnail);

return  convertView;
}

基本上这就是您必须要做的。 此致,