0

我有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。我不知道为什么。请帮忙。

4

3 回答 3

2

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

同样的问题:

Android :: OnTouchListener && OnClickListener 组合问题

OnTouchListener 和 OnClickListener 的区别

如何为 ImageButton 组合 OnClickListener 和 OnTouchListener

于 2013-10-12T08:26:49.943 回答
0

根据OnTouchListenertrue,返回onTouch意味着侦听器已经消费了该事件,因此它不会到达您的OnClickListener. 尝试并返回false

于 2013-10-12T08:28:15.743 回答
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
            }

        });
于 2013-10-12T08:33:29.740 回答