Java GridView.setOnItemClickListener触发整行

Java GridView.setOnItemClickListener触发整行,java,android,baseadapter,android-gridview,Java,Android,Baseadapter,Android Gridview,我有一个网格视图3x3。在这个网格中,我有ImageViews 我设置了OnItemClickListener,但当我单击ImageView时,无论我按的是哪列,一行中都只按第一个。我也可以在ImageView(空白)外按,但还是先按该行上的ImageView XML R.drawable.logo只是一个随机选择的图像。我遇到过这个问题,我提出的解决方案很简单: 在适配器中,为每个视图指定一个唯一的标记 view.setTag(id); //example 在ItemClickListene

我有一个网格视图3x3。在这个网格中,我有
ImageView
s

我设置了
OnItemClickListener
,但当我单击
ImageView
时,无论我按的是哪列,一行中都只按第一个。我也可以在
ImageView
(空白)外按,但还是先按该行上的
ImageView

XML


R.drawable.logo只是一个随机选择的图像。

我遇到过这个问题,我提出的解决方案很简单:

在适配器中,为每个视图指定一个唯一的标记

view.setTag(id); //example
在ItemClickListener上,只需匹配每个视图的标记,就可以确保永远不会发生这种情况:

if(view.getTag().equals(id))
    doStuff();
if(view.getTag().equals(otherId))
    doOtherStuff();
等等

以下是一个例子:

适配器

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ImageView imageView;
    CustomTextView textView;
    LinearLayout main_grl;

    if (v == null) {
        v = layoutInflater.inflate(R.layout.professions_gridview_item,parent,false);
    }

    main_grl = (LinearLayout)v.findViewById(R.id.main_grl);
    main_grl.setBackground(ContextCompat.getDrawable(mContext,R.drawable.ps_background_selector));
    imageView = (ImageView) v.findViewById(R.id.imageView);
    textView = (CustomTextView) v.findViewById(R.id.textView);
    imageView.setImageResource(ApplicationConstants.finalListIV[position]);
    textView.setText(ApplicationConstants.finalListTV[position]);
    v.setTag(ApplicationConstants.finalListTV[position]);

    return v;
}
活动

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    if((Integer) view.getTag() == someTag){
        //doStuff
    } else if((Integer) view.getTag() == otherTag){
        //doOtherStuff
    } else{
        //andSomeOther
    }
}
@覆盖
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
if((整数)view.getTag()==someTag){
//多斯塔夫
}else if((整数)view.getTag()==otherTag){
//涂鸦
}否则{
//等等
}
}

我遇到过这个问题,我想出的解决方案很简单:

在适配器中,为每个视图指定一个唯一的标记

view.setTag(id); //example
在ItemClickListener上,只需匹配每个视图的标记,就可以确保永远不会发生这种情况:

if(view.getTag().equals(id))
    doStuff();
if(view.getTag().equals(otherId))
    doOtherStuff();
等等

以下是一个例子:

适配器

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ImageView imageView;
    CustomTextView textView;
    LinearLayout main_grl;

    if (v == null) {
        v = layoutInflater.inflate(R.layout.professions_gridview_item,parent,false);
    }

    main_grl = (LinearLayout)v.findViewById(R.id.main_grl);
    main_grl.setBackground(ContextCompat.getDrawable(mContext,R.drawable.ps_background_selector));
    imageView = (ImageView) v.findViewById(R.id.imageView);
    textView = (CustomTextView) v.findViewById(R.id.textView);
    imageView.setImageResource(ApplicationConstants.finalListIV[position]);
    textView.setText(ApplicationConstants.finalListTV[position]);
    v.setTag(ApplicationConstants.finalListTV[position]);

    return v;
}
活动

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    if((Integer) view.getTag() == someTag){
        //doStuff
    } else if((Integer) view.getTag() == otherTag){
        //doOtherStuff
    } else{
        //andSomeOther
    }
}
@覆盖
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
if((整数)view.getTag()==someTag){
//多斯塔夫
}else if((整数)view.getTag()==otherTag){
//涂鸦
}否则{
//等等
}
}

检查这个@NovoLucas,我已经把那个红了。不幸的是,我需要做一个听众。适配器内没有clickListener。@NovoLucas查看您是否想了解更多信息检查此@NovoLucas我已经红了那个。不幸的是,我需要做一个听众。适配器内没有clickListener。@如果你想知道更多,看看吧哈哈,太巧了,我今天遇到了标签问题,我想使用多个标签。谢谢你。不幸的是,这不起作用。问题是,无论在行中按“列第一个”按钮,它都会返回相同的标记row@Ricardo很抱歉,没问题,但我刚刚检查并添加了它们。没有什么变化。因为我已经返回了mThumbIds.length;它仍然有效这里是一个完整的工作示例代码,关于编辑后的帮助,但我发现问题是我放在gridView上的onTouchListener。如果没有它,它工作得很好哈哈,多巧啊,我今天的标签有问题,我想用不止一个标签。谢谢你。不幸的是,这不起作用。问题是,无论在行中按“列第一个”按钮,它都会返回相同的标记row@Ricardo很抱歉,没问题,但我刚刚检查并添加了它们。没有什么变化。因为我已经返回了mThumbIds.length;它仍然有效这里是一个完整的工作示例代码,关于编辑后的帮助,但我发现问题是我放在gridView上的onTouchListener。没有它,一切都很好