【问题标题】:Work only one of listeners只工作其中一位听众
【发布时间】:2013-10-12 08:19:39
【问题描述】:

我有 RelativeLayout 和两个听众:onTouch & onClick

 private RelativeLayout userItem;

 userItem = (RelativeLayout) activity.findViewById(R.id.sliding_menu_userItem_rL);

 userItem.setOnClickListener(userItemOnClick());
 userItem.setOnTouchListener(userItemOnTouch());

    /**
     * Add user item reaction on click
     */
    private View.OnClickListener userItemOnClick() {
        Log.d(LOG_TAG, "userItemOnClick");
        return new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentTransaction t = getSupportFragmentManager().beginTransaction();
                UserFragment mFrag = new UserFragment();
                Log.d(LOG_TAG, "replace");
                t.replace(R.id.fragment_container, mFrag);
                t.addToBackStack(null);
                menu.toggle();
                t.commit();
            }
        };
    }

    /**
     * Add user item reaction on touch
     */
    private View.OnTouchListener userItemOnTouch() {
        return new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        userItem.setBackgroundResource(android.R.color.holo_blue_dark);
                        break;
                    case MotionEvent.ACTION_UP:
                        userItem.setBackgroundResource(R.drawable.sliding_menu_user_item_bg);
                        break;
                    default:
                        break;
                }
                return true;
            }
        };
    }

问题是 onClickListener 只有在这条线出现时才有反应:

userItem.setOnTouchListener(userItemOnTouch());

在其他情况下仅适用于 onTouchListener。我不知道为什么。请帮忙。

【问题讨论】:

    标签: android action android-relativelayout onclicklistener ontouchlistener


    【解决方案1】:

    你不能同时使用两者,所以如果你想继续一个特殊的条件,你可以定义一个布尔变量,然后在你的onTouchListener监听器中返回这个布尔值,所以当你的变量设置为真/假时,它会切换您的onTouchListener 监听器激活/停用。

    同样的问题:

    Android :: OnTouchListener && OnClickListener combination issue

    Difference between OnTouchListener and OnClickListener

    How to combine OnClickListener and OnTouchListener for an ImageButton

    【讨论】:

      【解决方案2】:

      根据OnTouchListener,在onTouch中返回true表示监听器已经消费了该事件,所以它不会到达你的OnClickListener。请尝试返回 false

      【讨论】:

        【解决方案3】:

        试试这个,让两者都能轻松工作

            userItem.setOnTouchListener(new OnTouchListener() {
        
                    public boolean onTouch(View v, MotionEvent event) {
                    //Your work here
                        return false;
                    }
                });
        
        
        userItem.setOnClickListener(new OnClickListener() {
        
                    public void onClick(View v) {
                        //Your work here
                    }
        
                });
        

        【讨论】:

          猜你喜欢
          • 2021-01-07
          • 2013-06-07
          • 1970-01-01
          • 2020-09-28
          • 1970-01-01
          • 2014-08-23
          • 2022-06-15
          • 1970-01-01
          相关资源
          最近更新 更多