2013-08-12 25 views
1

我目前正在使用Android应用程序显示当前时间。我已经有了现在的时间,但我需要它充满活力;它应该每秒更新一次。我发现这个解决办法,但有些不对劲:在Android中使用片段显示当前时间

public void onActivityCreated(Bundle savedInstanceState) { 

    super.onActivityCreated(savedInstanceState); 

    Thread timerThread = null; 

    Runnable runnable = new CountDownRunner(); 
    timerThread = new Thread(runnable); 
    timerThread.start(); 
} 

public void doWork() { 
    runOnUiThread(new Runnable() { 
     public void run() { 
      try { 
       Date dt = new Date(); 
       int day = dt.getDate(); 
       int month = dt.getMonth(); 
       int hours = dt.getHours(); 
       int minutes = dt.getMinutes(); 
       int seconds = dt.getSeconds(); 
       String curTime = hours + ":" + minutes + ":" + seconds; 
       time.setText(curTime); 
      } catch (Exception e) { 
      } 
     } 
    }); 
} 

class CountDownRunner implements Runnable { 
    // @Override 
    public void run() { 
     while (!Thread.currentThread().isInterrupted()) { 
      try { 
       doWork(); 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       Thread.currentThread().interrupt(); 
      } catch (Exception e) { 
      } 
     } 
    } 
} 

的错误是在这条线:

runOnUiThread(new Runnable() {

我认为这个错误的原因是因为我在片段实现它。它不会扩展到实现Thread所需的Activity。

我试图搜索并找到一个可能的答案,其中我应该需要一个活动来扩展它在runOnUiThread但我还没有找到任何实现如何做到这一点。我现在有点困惑和困惑。 。

+1

这可能会帮助你更好地实现它。这是官方Android TextClock的源代码:https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/TextClock.java – Milan

+0

哇。这是非常棒的信息。我会检查这一点。谢谢@Milanix。 – princepiero

回答

2

试试这个:getActivity().runOnUiThread(new Runnable...

这是因为:

1)在呼叫隐含这runOnUiThread指的是的AsyncTask,不是你片段

2)片段没有runOnUiThread

+0

这个完美的作品!谢谢。 – princepiero

1

getActivity()runOnUiThread(新的Runnable(){

1

如果您使用的片段,然后尝试使用:

getActivity().runOnUiThread(new Runnable(){ 
} 

而且如果你在练习使用这种再使用:

YourActivity.this.runOnUiThread(new Runnable() { 
} 
相关问题