只有一个听众

时间:2013-10-12 08:19:40

标签: android action relativelayout onclicklistener ontouchlistener

我有两位听众RelativeLayoutonTouch& 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。我不知道为什么。请帮助。

3 个答案:

答案 0 :(得分:2)

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

同样的问题:

Android :: OnTouchListener && OnClickListener combination issue

Difference between OnTouchListener and OnClickListener

How to combine OnClickListener and OnTouchListener for an ImageButton

答案 1 :(得分:0)

根据OnTouchListener,在true中返回onTouch表示听众已经使用了该事件,因此无法访问您的OnClickListener。请尝试返回false

答案 2 :(得分:0)

尝试这一点,以便轻松完成工作

    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
            }

        });