【问题标题】:Double tap listener is not working in fragments双击侦听器在片段中不起作用
【发布时间】:2016-06-09 17:22:03
【问题描述】:

双击侦听器在片段中不起作用。首先,我在示例项目中编写并实现了在示例项目中运行良好的示例项目。在示例项目中只有一个活动。但是当我尝试将该示例代码集成到我的项目中时,它无法正常工作。我的真实项目有一个正在加载片段的活动。我的要求是当我双击该片段上的任何位置(加载到活动)时,我想要一些针对它的功能。问题是双击不起作用。这是我正在使用的代码实现它。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // If user is not logged in
    if (new SessionHelper(this).getCurrentUser() <= 0)
        startActivity(new Intent(this, LoginScreen.class));
    else {
        mFragmentActivity = this;

        // Broadcast receiver initialized here
        mWifiStateReceiver = new WifiStateReceiver(mFragmentActivity);

        setContentView(R.layout.activity_fragment);
        initialize();
        setSupportActionBar(toolbar);
        if (getSupportActionBar() != null)
            getSupportActionBar().setDisplayShowTitleEnabled(false);
        setClickListerns();

        gestureDetector = new GestureDetector(this, this);

        gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
            @Override
            public boolean onSingleTapConfirmed(MotionEvent e) {
                LogHelper.debugLog("single tap");
                return false;
            }

            @Override
            public boolean onDoubleTap(MotionEvent e) {

                LogHelper.debugLog("doubletap");
                return false;
            }

            @Override
            public boolean onDoubleTapEvent(MotionEvent e) {
                return false;
            }
        });

        // Check if redirected via push notification
        if (getIntent().getExtras() != null && getIntent().getExtras().getBoolean("Notification", false))
            replaceFragemtn(new StatementOfAccount(), false);
        else
            replaceFragemtn(new HomeFragment(), false);

    }
}

我正在像这样在我的 Activity 中实现 GestureDetector.OnGestureListener

public class FragmentActivity extends BaseClass
        implements View.OnClickListener, GestureDetector.OnGestureListener {}

我正在重写 onTouchEvent() 这样的方法

@Override
public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

我无法弄清楚我错过了什么。尝试解决这个问题很长时间,但没有运气。请帮忙。

【问题讨论】:

    标签: android gesture


    【解决方案1】:

    您真的需要使用 GestureDetector 吗?
    Сan 你适合这个选项吗?

    public static abstract class DoubleClickListener implements View.OnClickListener {
    
        private static final long DOUBLE_CLICK_TIME_DELTA = 300;
    
        private long lastClickTime = 0;
    
        @Override
        public void onClick(View v) {
            long clickTime = System.currentTimeMillis();
            if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA) {
                onDoubleClick(v);
            } else {
                onSingleClick(v);
            }
            lastClickTime = clickTime;
        }
    
        public abstract void onSingleClick(View v);
    
        public abstract void onDoubleClick(View v);
    }
    

    【讨论】:

    • 我想要完整的屏幕作为双击监听器。我应该在哪里实现?正在加载片段的框架布局。我应该在 clicklistener 上传递这个吗?
    • 是的,你应该这样写:rootLayout.setOnClickListener(new DoubleClickListener(){....});
    • 检查 rootLayout 是否可点击 = "true" 且已启用 = "true"
    • 是的,我已将可点击设置为根布局仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多