Android 禁用仅点击ViewPager

Android 禁用仅点击ViewPager,android,android-viewpager,ontouchlistener,gesturedetector,Android,Android Viewpager,Ontouchlistener,Gesturedetector,我有一个可以滚动浏览电子邮件的ViewPager,当用户停止滚动一小段时间时,它会通过一个调度程序请求一封电子邮件 在此暂停期间,我不希望页面上的任何占位符按钮被单击。在这个寻呼事件中,因此我希望允许刷卡,因为用户可以继续刷卡到不同的电子邮件,但禁止点击发件人/收件人或电子邮件中的交互元素,这些元素仍然是占位符,不会指向任何地方 到目前为止,我在查看寻呼机上尝试过这样做: // Set a simple gesture to handle our click request, allowing

我有一个可以滚动浏览电子邮件的ViewPager,当用户停止滚动一小段时间时,它会通过一个调度程序请求一封电子邮件

在此暂停期间,我不希望页面上的任何占位符按钮被单击。在这个寻呼事件中,因此我希望允许刷卡,因为用户可以继续刷卡到不同的电子邮件,但禁止点击发件人/收件人或电子邮件中的交互元素,这些元素仍然是占位符,不会指向任何地方

到目前为止,我在查看寻呼机上尝试过这样做:

// Set a simple gesture to handle our click request, allowing everything else
final GestureDetector.SimpleOnGestureListener dsl_simpleDetector = new GestureDetector.SimpleOnGestureListener() {
    public boolean onSingleTapUp (MotionEvent motionEvent) {
        // Don't want to do anything with this if timer is running
        final ExchangeEmailActivity ds_act = (ExchangeEmailActivity) getActivity();
        if (ds_act.dsc_timer != null) { // We're waiting for the page to load still
            return false; // Handle it by doing nothing
        } else {
            return true; // Let it be handled as necessary
        }
    }
};

// The listener will call the simple gesture above to handle it
vp_pager.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return (dsl_simpleDetector.onSingleTapUp(motionEvent));
    }
});

如果不希望用户单击某个按钮,请禁用该按钮。
仅仅为了阻止用户点击按钮而“黑客”触摸监听器是一种糟糕的设计。

与按钮本身交互是不可行的,它们是更广泛系统的一部分,黑客攻击它们将是更糟糕的设计。ViewPager是其中最浅的系统,其功能应该只适用于该特定的ViewPager,而不是其他的。ViewPager可能是最浅的系统。但您必须从用户视图中查看它。如果你的应用程序中有启用的按钮(你不允许点击),用户迟早会尝试点击它们,但不会发生任何事情。在这种情况下,这样做似乎是可以接受的,因为此禁用功能只应持续约200毫秒,在拦截此功能时,可以提供toast消息,让ViewPager通知用户等待加载完成。