2013-03-18 79 views
1

我已經有4次高分辨率drawables(用於測試目的)和Buttons在每個活動同一地點的活動。點擊一個按鈕移動到下一個活動(活動1 - 點擊 - >活動2 - 點擊 - >活動3 - 點擊 - >活動4)。由於高分辨率的圖片需要大約0.5秒來加載一個活動。如何在完全加載活動之前阻止onClick

問題所在。當用戶在Activity1上的按鈕上點擊3次(在它消失之前) - Activity4被打開。

它看起來像點擊緩存不知何故。如何防止它(特別是通過點擊到另一個活動)?

+0

這是hdpi圖像來自你的res /文件夾,或通過網..?我從來沒有經歷過從設備載入圖像前半秒的延遲。我們說話有多大......? – jlindenbaum 2013-03-18 19:00:50

+0

這不是真的0.5秒就少了。但這並不重要 - 發佈圖像會更小。線索是如何在完全加載活動之前禁用onClick。爲什麼它甚至發生;)。 – androfan 2013-03-18 19:12:27

+1

這取決於您如何加載圖像以及暫停來自何處。你通過網絡加載它嗎?從SD卡?從/ res?是將位圖設置到「ImageView」後,還是將編碼圖像解析爲「Bitmap」後暫停? – 2013-03-18 19:23:13

回答

1

您可以在點擊它時禁用按鈕並在onResume()中爲每個活動啓用它。

+0

這是個簡單的主意,謝謝。我想知道是否有一些我得到的問題的解釋;)。 – androfan 2013-03-18 19:54:02

+0

您是否對所有按鈕的活動或ID名稱使用相同的佈局? – AwadKab 2013-03-18 20:00:02

+0

不,每個活動都有自己的佈局。 – androfan 2013-03-18 20:28:36

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)創建的圖像緩存,加載有durring所述第一活動圖像,然後被填充高速緩存後,從其他活動訪問它們。你可以閱讀更多關於caching bitmaps here

爲了使這個建議工作,你需要修改一些在android文檔中解釋的方法。而不是將緩存包含在一個活動中,請使用類似singelton pattern的內容來啓動可在整個應用程序中訪問的緩存。這樣你只需要加載一次bimaps。

+0

謝謝。實際上沒有活動可見,但onClick無論如何都被執行。我想防止這種行爲。它的作用類似於Button和ListView for ex。這個解決方案非常類似於AwadKabs的解決方案。 – androfan 2013-03-18 20:36:37

+0

等待如何在沒有任何活動的情況下執行? – Rarw 2013-03-18 23:11:09

+0

Activity1(單擊,單擊) - > Activity2閃爍 - > Activity3加載。 – androfan 2013-03-24 09:49:17

0

您可以在加載圖片時使用AsyncTask和progressdialog。加載完成後,您可以設置啓用/可點擊下一個按鈕。所以它確保首先載入圖片,之後你就可以進入下一個活動。

相關問題