Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ListView Android中获取位置imageView_Java_Android_Listview_Listener - Fatal编程技术网

Java 如何在ListView Android中获取位置imageView

Java 如何在ListView Android中获取位置imageView,java,android,listview,listener,Java,Android,Listview,Listener,我有一个每个项目的图片列表,当我点击图片时,我需要列表的位置 我怎么能得到这个 我试图执行View.getTag().ToString(),但操作错误 代码如下: ImageView im = (ImageView) convertView.findViewById(R.id.imageViewDSD); im.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {

我有一个每个项目的图片列表,当我点击图片时,我需要列表的位置

我怎么能得到这个

我试图执行
View.getTag().ToString()
,但操作错误

代码如下:

ImageView im = (ImageView) convertView.findViewById(R.id.imageViewDSD);

im.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        try {
            Toast.makeText(contextCustom,
                    "ImageView clicked for the row = " + v.getTag(),
                    Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Log.i("Error", "errore vista " + e);
        }

    }

});
listView.setOnItemClickListener(新的OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
在你的图像上张贴
Toast.makeText(getApplicationContext(),“”+位置,Toast.LENGTH_LONG.show();
}
});

在每个getView上,将ImageView的标记设置为与列表项的位置相等

然后在侦听器中,您可以获取标记,并确定此图像属于哪个列表项

ImageView im = (ImageView) convertView.findViewById(R.id.imageViewDSD);
im.setTag(position);
还请注意,您不应该每次调用getView时都创建一个新的侦听器,而应该仅在
convertView
为null时才创建。但是,无论convertView的值如何,都应始终设置标记

编辑:

下面是一个完整的neat getView方法示例(使用holder模式避免
findViewById
):


CustomAdapter的
getView()
方法已经具有
int position
参数。将其设置为最终版,并在ImageView的
onClick()中使用你明白我的意思了吗?不适用。OP需要在ImageView中单击,这是列表行的单个视图。未完成ListRow的单击。我不明白您需要什么我们可以在listview上使用onitemclick listner来获取Pisition和image view我们不能在onitemclick上应用,因为只有当ImageView的
onClick()
方法超出适配器的
getView()
方法时,才需要包含单个项
getTag()
setTag()
。或者您不希望将
int position
参数设置为
final
。否则,您可以直接在ImageView的
onclick()
中使用int-position参数,将其声明为
final
@user370305,为每次调用getView创建一个新的侦听器,这在我看来是相当愚蠢的。是的,但它选择了OP。通过上面的代码,我们不能说任何关于创建新侦听器的事情,因为我们需要完整的代码。
ImageView im = (ImageView) convertView.findViewById(R.id.imageViewDSD);
im.setTag(position);
private static class ViewHolder {
    ImageView imgView;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // (Re)Use the convertView
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, parent, false);
        holder = new ViewHolder();
        holder.imgView = (ImageView) convertView.findViewById(R.id.imageViewDSD);
        holder.imgView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(contextCustom, "Pos: " + v.getTag(),
                        Toast.LENGTH_SHORT).show();
            }
        });
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.imgView.setTag(position);

    // Do something else with your image here

    return convertView;
}