2012-03-12 63 views
1

我正在開發一個有2個按鈕的android應用程序。 這兩個按鈕由一個線程返回 所以我1)啓動一個新的線程2)禁止調用子程序 下面的按鈕3)中的數據的工作是針對在java中的線程和標誌之間交換多個對象

new Thread(new Runnable(){ 
      public void run() { 
       getPolls(); 
       answer.setEnabled(false); 
       review.setEnabled(false); 

      } 
     }).start(); 

1.My代碼第一問題是我怎麼能知道子線程已經完成,以便我可以重新啓用按鈕? 2.線程中調用的getPolls()方法產生一個arrayList。我通過處理程序如下返回它

//Sending the filled poll questions data to the main thread 
     Message qemsg = messageHandler.obtainMessage(); 

     qemsg.obj=poll; 

     messageHandler.sendMessage(qemsg); 

消息處理程序代碼如下

//Message Handler to get messages from the thread 
    private Handler messageHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      polldata=(ArrayList<PollQuestion>) msg.obj; 

     } 
    }; 

我的疑問是如何發送使用信息處理兩個不同的對象?

請幫我一把。

回答

0

Message對象有兩個buildin整數字段arg1arg2what(請參閱http://developer.android.com/reference/android/os/Message.html)。使用它們來區分處理程序中不同類型的消息。例如:

public static final int TYPE1 = 1; // use a better name ... 
public static final int TYPE2 = 2; 
public void handleMessage(Message msg) { 
    switch(msg.what) { 
     case TYPE1: polldata=(ArrayList<PollQuestion>) msg.obj; break; 
     case TYPE2: ... 
     } 
} 

爲了通信,所述線程已經完成考慮使用只是另一個消息和標記的類型使用what(線程完成)。

2

我會創建a singleton,然後在回調中設置一個布爾值來顯示它何時完成。然後你可以從你的代碼的任何部分訪問這個單例來檢查它是否完成。另一種方式是定時器。設置一個計時器來檢查它是否完成並更新按鈕。

0

我會使用您在getPolls()中初始化的靜態ArrayList。在您的handleMessage方法中,將您的polldata設置爲等於靜態ArrayList。例如,創建一個類稱爲常量:

public class Constants{ 
    static ArrayList<PollQuestions> constPolls; 
} 

在getPolls()設置Constants.constPolls

Message qemsg = messageHandler.obtainMessage(); 

    //qemsg.obj=poll; 
    // no need to set an object. 

    messageHandler.sendMessage(qemsg); 

然後處理消息:

//Message Handler to get messages from the thread 
private Handler messageHandler = new Handler() { 
    public void handleMessage(Message msg) { 
     polldata=Constants.constPolls; 

    } 
}; 

希望這有助於。

1

我會與詹姆斯霍洛威的單身人士的建議,這樣你就可以控制你正在談論哪個線程。

至於發送不同的信息,他們可以與Message.what場

qemsg.what = MY_CONST_ID; 

待確定處理程序,你可以找到你所發送的消息類型和它相應的解碼

public void handleMessage(Message msg){ 
    switch (qmsg.what) 
    { 

    case MY_CONST_ID: 
     //process your message here 
     break; 
    } 



}