gpt4 book ai didi

java - onTouch 方法 - 跟踪已单击或按下的按钮实例

转载 作者:行者123 更新时间:2023-12-01 15:29:26 26 4
gpt4 key购买 nike

我有一个循环,在其中创建了多个按钮实例,并且每个实例都有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com