我有一个循环,在其中创建了多个按钮实例,并且每个实例都有一个 TouchListener。但是,当触摸不同的按钮时,我无法弄清楚如何进行管理。我想要完成的是每个按钮代表一个 TextView ,当我触摸按钮时,我想将与该按钮实例关联的特定 TextView 添加到数组列表中。但是,当再次触摸同一按钮时,我想将其从列表中删除......并在再次触摸时将其重新添加回来。哦,是的,addToOrder 目前是全局的并初始化为 true。
想法?
编辑****根据我下面的评论,按钮现在是我编写的 Button 子类的实例,以便我可以轻松跟上按钮的每个实例。这解决了问题。
这是代码:
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getActionMasked();
//Log.d("Touched Add To Order Button with id of ", button.getId() + ": " + button.getText().toString());
TextView relativeTitleView;
ViewGroup relativeGroup = (ViewGroup)v.getParent();
relativeTitleView = (TextView) relativeGroup.getChildAt(0);
//Log.d("Add To Order Button Touched", relativeTitleView.getText().toString());
/*if(action ==MotionEvent.ACTION_DOWN){
addToOrder = (addToOrder) ? true : false;
if(addToOrder)
dbAccess.addToOrder(relativeTitleView.getText().toString());
else
dbAccess.removeFromOrder(relativeTitleView.getText().toString());
}
else if(action == MotionEvent.ACTION_UP){
addToOrder = !addToOrder;
}*/
if(action == MotionEvent.ACTION_DOWN){
if(button.getTouchInfo()){
dbAccess.addToOrder(relativeTitleView.getText().toString());
button.setTouchInfo(false);
}
else {
dbAccess.removeFromOrder(relativeTitleView.getText().toString());
button.setTouchInfo(true);
}
}
return false;
}
});
最佳答案
您可以使用setTag
在任何View
(其中Button是其子类)上设置任意对象,其中有两个版本。
因此,例如,在用于创建每个 Button
的循环中,您可以将 String
实例或 Integer
实例添加到 按钮
使用myButton.setTag(Object o)
触摸按钮时,它会作为 View v
参数传递给 onTouch
。
只需使用 getTag()
从 v
中提取标签并检查它即可。
关于java - onTouch 方法 - 跟踪已单击或按下的按钮实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743333/