【发布时间】:2012-03-16 19:23:57
【问题描述】:
我有一个循环,我在其中创建了多个按钮实例,并且每个实例都有一个 TouchListener。但是,我无法弄清楚如何在触摸不同按钮时进行管理。我想要完成的是每个按钮都代表一个文本视图,当我触摸按钮时,我想将与该按钮实例关联的特定文本视图添加到数组列表中。但是,当再次触摸相同的按钮时,我想将其从列表中删除..如果再次触摸,则将其重新添加。哦,是的 addToOrder 目前是全局的并初始化为 true。
想法?
EDIT**** per my cmets below button 现在是我编写的 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;
}
});
【问题讨论】:
-
我刚刚意识到 addToOrder - 因为是全局的,所以无法判断按钮的某个实例是否已被触摸。我需要的是每个按钮实例的 addToOrder 变量 - 但是我会得到那个可怕的最终/非最终变量错误......
标签: java android touch-event ontouchlistener android-button