2013-01-22 54 views
-4

我是Android開發人員的初學者,正試圖製作一個應用程序,其要求是在文本框中顯示隨機數,並繼續顯示一秒或任意可編程延遲的隨機數,直到時間切換按鈕處於「開」狀態。有沒有人對此有過建議,或者如果可能的話,共享部分源代碼會很好。Android切換按鈕

另一個建議,我會需要的是關於任何好的書開始與Android的發展與內部細節也。如果在Android上任何種類的書,作爲我們對其他開發語言(例如:完全參考到Java,完整參考,以C,C++等)提前

感謝

+1

我會建議http://www.vogella.com,它有很好的教程。 –

+0

@ChintanRathod我不同意。我很少在vogella.com上找到有用的文章。 –

+0

如果你正在學習Android開發,你爲什麼要求代碼。你想讓自己學習還是從中學習? – Reno

回答

1

我看過一些Andoid書我強烈建議Android in Practice。讀完之後,你會知道大多數人在這裏提出的關於StackOverflow的問題都會從本書中獲益。這是極好的價格價值,作者明確知道他們在寫什麼。

編輯:關於執行(更新淘汰布爾)

public final class MyActivity extends Activity implements Runnable { 
    private Handler uiThreadHandler; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // basics 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_activity_layout); 
     // find text widget here, store in editText as also required in Chintan's solution 
     // get the current activity's handler, it's the UI thread 
     uiThreadHandler = new Handler(); 
     // initiate the updates if that's the initial state 
     scheduletUpdate(); 
     // register callbacks for button etc as required also in Chintan's solution 
    } 
    @Override 
    public void run() { 
     //update your editText field here -- this is run in the UI thread so it's safe! 
     scheduleUpdate(); 
    } 
    private void scheduleUpdate() { 
     uiThreadHandler.postDelayed(this, 1000); // 1000 ms 
    } 
    // etc, some stuff missing 
} 

編輯:關於如何停止執行run()方法的調度,可以使用下面的代碼,這應該是顯而易見的從Handler documentation(更新淘汰布爾):

uiThreadHandler.removeCallbacks(this); 
+0

我可以知道,停止這個'uiThreadHandler.postDelayed(this,1000)'的代碼在哪裏?'。因爲它的切換按鈕,因爲當我的切換按鈕關閉時,它必須停止更新。 –

+0

@ChintanRathod查看我更新的答案。你對Handlers不是很熟悉,對嗎? –

+0

@ChintanRathod正如我想到的,我真的可以擺脫processUpdates標誌,這隻會在真正併發存在的情況下才有用 - 這裏不是這種情況。感謝您激勵我提供更加優雅,精益的解決方案。現在將更新我的答案。 –

0

使用Thread一樣,

class MyThread extends Thread 
{ 
    private volatile boolean isRunning = false; 

    public synchronized void requestStop() { 
     isRunning = true; 
    } 

    @Override 
    public void run() { 
     //place code here... 
     try { 
      while (!isRunning) { 
       // do your coding 
       handler.sendMessage(handler.obtainMessage(WhatAbout.CHANGE_TEXT.ordinal(), 0, 0)); 
       Thread.sleep(1000 * 1); //1000 ms = 1 sec 
      } 


     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

現在定義下面的代碼來處理多個消息。

public enum WhatAbout { 
    CHANGE_TEXT 
} 

public WhatAbout[] wa = WhatAbout.values(); 

然後用[處理器] [1],它可以幫助您溝通BackgroundThreadUIThread。 不使用處理程序,您不能更改UI

將以下代碼放入onCreate方法中。

handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
    if (msg.what < wa.length) { 
    switch (wa[msg.what]) 
    { 
    case CHANGE_TEXT: 
     editText.setText(randomVariable); 
     break; 
    } 
    } 
}; 

當您關閉開關時,請使用以下代碼停止線程。

if (thread != null) { 
    thread .requestStop(); 
    thread = null; 
} 
+0

您的解決方案對我來說似乎相當複雜。我不認爲他會需要一個線程。爲什麼你忽略線程中斷並引入你自己的標誌? –

+0

@ClassStacker,你有任何解決方案,然後呢?你已經發布了一個答案,只是一個實用的教程建議。它被認爲是答案嗎?你不能發表評論? –

+0

看到我更新的答案。 –