2013-04-09 65 views
0

例子,而我有一個按鈕,如果按下它會調用一個函數從API獲取數據到屏幕。但是如果用戶再次按下並且該函數仍在運行(Processing),我該如何停止調用該函數。安卓:如何停止調用同一個函數的函數運行

,而不是隱藏的按鈕,有什麼辦法處理呢?我是否需要使用線程來處理它?檢查線程是否活着?我對此並不熟悉。請給我一些關於如何處理它的建議和例子。

對不起我的英文不好。 謝謝。

回答

0

做一個boolean當你按下按鈕,輪流true。如果它真的做了該方法的正常功能。然後使其成爲當人再次按下按鈕時boolean變爲false。當它是虛假的,使它做你想要的breakreturn或什麼都不做。

+0

感謝您的快速回復我會測試它,因爲該功能是從片段,我從活動執行功能。因爲我正在使用滑動菜單。當用戶滑動到左側面板時,面板必須刷新並獲取數據。所以我認爲這可能對我有用。 thanksss! – NaiveBz 2013-04-09 04:14:48

0

如果你調用的函數是同步的,在你不應該有任何問題。 如果函數啓動一個線程,那麼你可以這樣做:

Thread mThrd = null; 
public void func() { 
    if(mThrd!=null && mThrd.isRunning()) { 
     return; 
    } 

    mThrd = new Thread(/*the runnable that do the job*/); 
    mThrd.start(); 
} 

如果函數是一個框架的API,只是「做了在後臺」,它可能有一些方法來告訴你,是否完成,或者您可以通過一些方法檢查結果。像:

public void func() { 
    if(checkDone()) { 
     return; 
    } 
    callFrameworkAPI(); 
} 
+0

感謝您的快速回復。這可能對我有用,但對我來說太過於進步了。<因爲我不熟悉線程,並且仍然在開發android。但是,但我會測試它,謝謝!非常感謝。呃,我可以知道如何「在背景中做些什麼」嗎?我需要做什麼研究? – NaiveBz 2013-04-09 04:14:27

+0

如果你不熟悉的主題,我建議你使用的AsyncTask,請看看http://developer.android.com/reference/android/os/AsyncTask.html當我說在後臺做一些事情,我意思是說,例如你調用MediaPlayer.prepareAsync(),播放器將在後臺執行這個工作 - 緩衝等等,並且在完成之後,如果你註冊了監聽器,就會調用onPrepared()回調函數。因此,您可以在回調函數中標記一個標誌並將其用於checkDone()例程中。 – Robin 2013-04-09 04:22:49

-1

當您調用該函數時,將以下行添加到您的函數,這將使該按鈕已被點擊一次後不可點擊。

Button b1 = findViewById(R.id.button_name); 
b1.setClickable(false); 

在完成api提取後,可能在您的情況下函數結束,添加以下行,使按鈕再次可點擊。

b1.setClickable(true);