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

时间:2013-03-18 18:58:33

标签: android android-activity onclick

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

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

看起来点击是以某种方式缓存的。如何防止它(特别是点击另一个Activity)?

3 个答案:

答案 0 :(得分:1)

您可以在点击时禁用按钮,并在onResume()为每项活动启用它。

答案 1 :(得分:0)

我可以'告诉你是否试图阻止onClick()工作,直到加载了curent活动中按钮的图像,或者如果你关心其他活动中的图像被加载,然后才让用户切换到它们(即,您不希望用户在活动4中看到没有背景的按钮。)。以下是我对两者的建议。

如果是第一个问题,为什么不在你的活动中添加一个布尔标志呢?例如,假设onClick按钮触发方法nextActivity。创建一个变量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)创建图像缓存,在第一个活动期间加载图像,然后在填充缓存后从其他活动访问它们。您可以阅读有关caching bitmaps here的更多信息。

要使此建议有效,您需要修改android文档中解释的方法。不是将缓存包含在一个活动中,而是使用singelton pattern之类的东西来启动可以在整个应用程序中访问的缓存。这样你只需加载一次bimaps。

答案 2 :(得分:0)

您可以在加载图片时将AsyncTask与progressdialog一起使用。完成加载后,您可以设置启用/可点击下一个按钮。所以它确保首先加载图片,然后你就可以进入下一个活动了。