Android 如何在完全加载活动之前防止onClick

Android 如何在完全加载活动之前防止onClick,android,android-activity,onclick,Android,Android Activity,Onclick,我有4个活动,每个活动的同一个位置都有高分辨率的绘图功能(用于测试目的)和按钮。单击按钮可移动到下一个活动(活动1--单击-->活动2--单击-->活动3--单击-->活动4)。由于高分辨率图片,加载一个活动大约需要0.5秒 这个问题。当用户在Activity1上的按钮上单击3次(甚至在它消失之前)-Activity4将打开 看起来点击被缓存了。如何防止它(特别是将单击传递给另一个活动)?您可以在单击按钮时禁用该按钮,并在onResume()中为每个活动启用该按钮。我可以判断您是否试图停止onC

我有4个活动,每个活动的同一个位置都有高分辨率的绘图功能(用于测试目的)和按钮。单击按钮可移动到下一个活动(活动1--单击-->活动2--单击-->活动3--单击-->活动4)。由于高分辨率图片,加载一个活动大约需要0.5秒

这个问题。当用户在Activity1上的按钮上单击3次(甚至在它消失之前)-Activity4将打开


看起来点击被缓存了。如何防止它(特别是将单击传递给另一个活动)?

您可以在单击按钮时禁用该按钮,并在
onResume()
中为每个活动启用该按钮。

我可以判断您是否试图停止
onClick()
从工作到当前活动中按钮的图像被加载,或者在用户切换到其他活动之前,如果您关心正在加载的其他活动中的图像(即,您不希望用户看到活动4中没有背景的按钮)。以下是我对两者的建议

如果这是第一个问题,为什么不在活动中添加一个布尔标志呢?例如,假设onClick按钮触发方法nextractivity。创建一个变量buttonReady,该变量在活动开始时为false,但在
onCreate()
结束时设置为true,可能是在处理完怪物图像后。然后只需向正在触发的方法添加一个条件

public void nextActivity(View v){
    if(buttonReady){
        //start your next activity
    } else {
        Log.d("Button click", "Still loading. . .);
    }
}
这样你就不会禁用点击按钮的功能,只会影响效果。如果问题是在图像加载之前不希望人们使用按钮,我会采用类似的方法。只需使用
findViewById
并将按钮设置为不可见,直到位图处理完成,然后使按钮出现

如果您的问题是要延迟单击按钮的
onClick
,直到加载其他活动中的图像,那么这就更难了。我的问题是,至少在第一次启动时,不会加载任何图像——假设您正在使用它们的活动中处理位图。在这种情况下,我有两个可能的建议:

(1) 将按钮设置为不可见,直到按照上述建议处理图像,并在图像加载时将其带回。例如,要隐藏:

View button = findViewById(R.id.button);
button.setVisibility(View.GONE);(
(2) 创建映像缓存,在第一个活动期间加载映像,然后在缓存填充后从其他活动访问它们。你可以阅读更多关于


为了让这个建议生效,你需要稍微修改一下android文档中解释的方法。与其在一个活动中包含缓存,不如使用类似于的方法来启动一个可以跨整个应用访问的缓存。这样,您只需加载BIMAP一次

加载图片时,可以将AsyncTask与progressdialog一起使用。加载完成后,您可以设置启用/单击下一步按钮。因此,必须确保先加载图片,然后才能转到下一个活动。

此hdpi图像是来自您的res/文件夹还是通过网络。。?我以前从未经历过从设备加载图像的半秒延迟。我们说的有多大…?它不是0.5秒而是更小。但这并不重要——发布的图像会小得多。线索是如何在完全加载活动之前禁用onClick。为什么会发生这种情况;)。这取决于加载图像的方式以及暂停的来源。你是通过网络加载的吗?从SD卡?从/res?是将位图设置为
ImageView
后的暂停,还是将编码图像解析为
bitmap
时的暂停?它们是res/drawables中的.png/用作从xml直接加载的按钮背景上的图标。这很简单,谢谢。我不知道是否有人对我得到的问题作了一些解释。您对活动使用相同的布局还是对所有按钮使用相同的id名称?不,每个活动都有自己的布局。每个布局中的按钮id都不同?是的,它们都不同。谢谢。实际上没有可见的活动,但仍然执行onClick。我想阻止这种行为。它的工作原理与ex的Button和ListView类似。此解决方案与AwadKabs的解决方案非常类似。等等,在没有活动的情况下,它是如何执行的?活动1(单击,单击)->活动2闪烁->活动3加载。