2013-01-22 52 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

看到我更新的答案。 –