Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Android 是否为每个项目使用OnClickListeners的ScrollView?_Android - Fatal编程技术网

Android 是否为每个项目使用OnClickListeners的ScrollView?

Android 是否为每个项目使用OnClickListeners的ScrollView?,android,Android,我制作了一个ScrollView,并在其中填充了带有OnClickListeners的ImageView,但现在当我尝试滚动ScrollView时,似乎OnClickListeners挡住了我的去路,无法平滑滚动 除了使用ListView而不是ScrollView之外,还有其他方法可以解决这个问题吗 谢谢 对于每个ImageView,不必有OnClickListener 回调定义是 public abstract void onClick (View v) 其中v是单击的视图 根据您要执行的操

我制作了一个ScrollView,并在其中填充了带有OnClickListeners的ImageView,但现在当我尝试滚动ScrollView时,似乎OnClickListeners挡住了我的去路,无法平滑滚动

除了使用ListView而不是ScrollView之外,还有其他方法可以解决这个问题吗


谢谢

对于每个ImageView,不必有OnClickListener

回调定义是

public abstract void onClick (View v)
其中
v
是单击的视图

根据您要执行的操作,您可以识别特定视图,也可以不识别。如果您只是想做一些普通的事情(例如,应用色调),那么这是非常简单的

...
public void onClick(View v) {
    ImageView iv = (ImageView) v;
    iv.setTint(Color.BLUE); // Or whatever generic operation you want
} 
如果您需要明确地标识视图,例如它是XML菜单的一部分,那么我通常使用itemID来标识它

...
public void onClick(View v) {
    int id = v.getId();
    switch (id) {
        case R.id.save:
          //do stuff
          break;
        case R.id.open:
           //do stuff
           break;
    }
} 
如果视图不是静态的,则可以使用
setTag()
getTag()
方法唯一地标识(并关联有用数据!)每个视图:

...
public void onClick(View v) {
    // the MyViewInfo object was associated with the view somewhere else, presumably when the view was created
    MyViewInfo info = (MyViewInfo) v.getTag();
    File datafile = info.getFileName();
    ...
    }
}

谢谢你的解释!还有一件事,因为它是动态的,所以我应该如何将这个onClick函数与设置了标记的ImageView相关联呢?您的类X包含
onClick
方法,它必须实现
View.onClickListener
接口。然后,您需要为每个视图调用setOnClickListener(x),其中x是x的一个实例。如果容器视图足够聪明,可以将单击事件传播到其所有子视图,那么您可能只需要在父视图上调用
setOnClickListener