0

私はRelativeLayout2つのリスナーを持っています: 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

両方を同時に使用することはできないため、特別な条件で続行する場合は、ブール変数を定義し、リスナーでこのブール値を返すことができます。そのため、変数を true/false にすると、リスナーのアクティブ化/非アクティブ化onTouchListenerが切り替わります。onTouchListener

同じ問題:

Android :: OnTouchListener && OnClickListener の組み合わせの問題

OnTouchListener と OnClickListener の違い

ImageButton の OnClickListener と OnTouchListener を組み合わせる方法

于 2013-10-12T08:26:49.943 に答える
0

OnTouchListenerによると、返さtrueれる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 に答える