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

标签 java android touch-event ontouchlistener android-button

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

相关文章:

java - setRequestedOrientation 上的 IllegalStateException

java - 在Android上执行长CPU进程时渲染opengl es

安卓低功耗蓝牙配对

java - 如何在 Java 中访问和使用 PC Direct WiFi?

android - 检测触摸坐标是否在自定义 View 上可点击区域的坐标内

java - 以编程方式为 WebSphere 5.x 请求发送方绑定(bind) BasicAuth Web 服务客户端设置凭证

java - Spring Boot 千分尺计数取消

java - 获取 java.util.zip.ZipException : duplicate entry for SimpleJavaMail

java - Android Textview onTouchEvent

javascript - 模拟 touchstart 和 touchend 事件?