2011-04-12 84 views
2

我有一個ListView,其中onResume我試圖用SQL Lite數據庫中的數據填充。在恢復過程中,我添加一個點擊偵聽器並重新填充列表視圖。 onResume,populateListView()和onPause方法如下。完整的source code is available on GitHubAndroid onResume ListView爲空之後

的onResume:

@Override 
protected void onResume() { 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(TalkServerIntent.INTENT_NEW_MESSAGES.toString()); 
    registerReceiver(receiver, filter); 

    setContentView(R.layout.main); 

    talkListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parentView, View childView, 
          int position, long id) { 
      GeoCamTalkMessage msg = adapter.getTalkMessage(position); 
      if (msg.hasAudio()) { 
       try { 
        UIUtils.playAudio(getApplicationContext(), msg, player, 
          siteAuth); 
       } catch (Exception e) { 
        UIUtils.displayException(getApplicationContext(), e, 
          "Cannot retrieve audio"); 
       } 
      } 
     } 
    }); 

    populateListView(); 
    super.onResume(); 
} 

populateListView:

private void populateListView() { 
    try { 
     talkMessages = messageStore.getAllMessages(); 
    } catch (Exception e) { 
     Log.i("Talk", "Error:" + e.getMessage()); 
    } 

    if (talkMessages != null) { 
     adapter.setTalkMessages(talkMessages); 
     talkListView.setAdapter(adapter); 
    } 
} 

我什麼也沒做對的onPause特別,但因爲值存儲在數據庫中沒有想到我會。

的onPause

@Override 
protected void onPause() { 
    unregisterReceiver(receiver); 
    super.onPause(); 
} 

我在做什麼錯,是造成不被刷新的onResume ListView的?

+0

@ahsteele:你有沒有試過調試過這個或遵循logcat?似乎最可能的原因是,talkMessages = messageStore.getAllMessages();返回null,所以適配器從不設置。 – Squonk 2011-04-13 00:17:48

+0

@MisterSquonk這就是我想和發佈之前在調試器中運行應用程序。我已經密切關注了LogCat,並沒有看到任何可能表明問題的事情。但是我確實知道'messageStore.getAllMessages()'返回了肯定的消息。 – ahsteele 2011-04-13 00:21:59

+0

@ahsteele:遠射 - 我注意到你傾向於在重寫的方法(例如onResume())結束時調用'super'方法。我看到的大多數代碼在開始時往往會有這些代碼(有一些例外)。有沒有機會RoboActivity在其onResume()方法中做些什麼,這可能會產生負面影響?正如我所說,這似乎不太可能,只是一個長鏡頭。 – Squonk 2011-04-13 00:47:13

回答

5

您可以嘗試將setContentView(R.layout.main);移至您的onCreate()方法。

每次在onResume()中設置它都可能導致問題。