2015-07-20 77 views
0

在TextView中顯示時間並不斷更新它的最佳方式是什麼?我目前擁有的代碼不會更新現有的TextView,而是會在我的佈局Example內創建一個新的TextView。實時顯示時間並在列表視圖中更新

我有以下代碼:Boss.javaBossAdapter.java

public String[] getTime(){ 

    String[] time_array = new String[6]; 
    Calendar c = Calendar.getInstance(); 
    SimpleDateFormat df = new SimpleDateFormat("HH-mm-ss"); 
    String formattedDate = df.format(c.getTime()); 

    for(int i = 0; i < 6; i++){ 
     time_array[i] = formattedDate; 
    } 

    return time_array; 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView = (ListView) findViewById(R.id.list_view); 
    bossView = (TextView) findViewById(R.id.boss_time); 
    boss_title = getResources().getStringArray(R.array.boss_array); 
    adapter = new BossAdapter(getApplicationContext(), R.layout.boss_layout); 
    listView.setAdapter(adapter); 

    handler = new Handler(); 
    Runnable update = new Runnable() { 
     @Override 
     public void run() { 

      bossTime = getTime(); 
      int i = 0; 
      for (String boss : boss_title) { 
       Boss bossObject = new Boss(boss_icon[i], boss, bossTime[i]); 
       adapter.add(bossObject); 
       i++; 
      } 
      handler.postDelayed(this , 1000); 
     } 
    }; 
    handler.postDelayed(update, 10); 
} 

回答

0

在這裏,代碼修復被註釋和以下解釋的,

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView = (ListView) findViewById(R.id.list_view); 
    bossView = (TextView) findViewById(R.id.boss_time); 
    boss_title = getResources().getStringArray(R.array.boss_array); 
    adapter = new BossAdapter(getApplicationContext(), R.layout.boss_layout); 
    listView.setAdapter(adapter); 

    bossTime = getTime(); 
    int i = 0; 
    // Moved our object creation here, so that it should only be done once. 
    for (String boss : boss_title) { 
     Boss bossObject = new Boss(boss_icon[i], boss, bossTime[i]); 
     adapter.add(bossObject); 
     i++; 
    } 

    handler = new Handler(); 
    Runnable update = new Runnable() { 
     @Override 
     public void run() { 
      bossTime = getTime(); 
      int count = adapter.getCount() 
      for (int i = 0; i < count; i++) { 
       ((Boss) adapter.getItem(i)).setBoss_time(bossTime[i]); // Re-set time 
      } 
      adapter.notifyDataSetChanged(); // Notify our update 
      handler.postDelayed(this , 1000); 
     } 
    }; 
    handler.postDelayed(update, 10); 
} 
+0

我試圖此然而行「((首領)adapter.getItem (i))的setBoss_time(I);」不起作用setBoss_Time是一個字符串,而這適用於int。應該修改我的getter/setter修復此問題? –

+0

@Baegmon在那裏,它是固定的!看到更改?現在,'((老闆)adapter.getItem(i))。setBoss_time(bossTime [i]);' –

+0

是的,我剛剛測試了代碼,它似乎工作正常。請問我的邏輯是否正確?首先創建對象(我正在做的是重複創建對象,然後重複多個對象)。然後創建一個處理程序來重複獲取時間並在run方法中使用forloop進行設置? –

相關問題