2013-10-04 54 views
0

由於某種原因,我的onListItemClick(View listView,View view,int position,long id){}在某些條件下不會觸發。我的應用程序像這樣流動。 ListActivity觸發另一個活動,有時用戶或其他條件可能導致該活動結果結束。 ListActivity第一次被觸發時,意味着onCreate方法被調用,那麼onListemClick()總是起作用。第一次用戶返回相同的活動時,情況也是如此,然後onListItemClick始終工作。問題出現在用戶第二次返回到ListActivity時,那麼onListItemClick根本不會觸發,就像沒有監聽器連接到視圖一樣。ListActivity - onListItemClick

我確實重複檢查過設置了listAdapter。它是標準的ArrayAdapter。所有其他的監聽器都是有效的,所以我懷疑是由於某種原因ListActivity不能用作監聽器,但我無法理解爲什麼。它是完全相同的代碼,兩次運行的值完全相同,但由於某種原因,聽衆似乎是空的。該代碼是在調用setContentView(int id)之後的onResume方法中執行的。有誰知道爲什麼會發生這種情況?

下面的代碼啓動佈局,那裏沒有問題,它都按預期運行。

private void initLayout(){ 

    projectsToList(user.getProjects()); 

    ttvEmailField = (TextView) findViewById(R.id.ttv_email); 
    ttvNameField = (TextView) findViewById(R.id.ttv_username); 

    String email = user.getEMail(); 
    String name = user.getName(); 

    if(email != null && email.length() > 0){ 
     ttvEmailField.setText(user.getEMail()); 
    } 

    if(name != null && email.length() > 0){ 
     ttvNameField.setText(user.getName()); 
    } 

    btnLogout = (Button) findViewById(R.id.btn_logout); 

    btnLogout.setOnClickListener(this); 

} 

下面的代碼設置一個ArrayAdapter時,onListItem只適用的onCreate之後並在第一時間將用戶導航回currentactivity。

private void projectsToList(List<ProjectPojo> projects){ 
    int max = projects.size(); 
    String[] arrProjects = new String[max]; 

    for(int i = 0; i < max; ++i){ 
     arrProjects[i] = projects.get(i).getName(); 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item_simpletext, R.id.ttv_listtextview, arrProjects); 

    setListAdapter(adapter); 
} 

回答

0

我從來沒有發現這一次發生了什麼。我想出的解決方案不是使用繼承,而是手動實現OnItemClickListener。現在它每次都有效。

0

你的初始化工作在oncreate中,並且還在oncreate()方法中設置適配器。可能是你沒有在OnResume()方法中設置監聽器。或者你正在設置監聽器等於null的恢復方法。

+0

oncreate方法只會調用super.onCreate,實際的類初始化發生在onResume中,因爲即使活動被恢復,也不會創建該方法。由於聽衆是'這個'它真的不能真正爲空,我認爲,它實際上工作一次後,用戶已從其他活動導航回來。我有雙重檢查,沒有值爲空。 – Geir

0

在Onresume()方法中重新初始化您的列表或偵聽器! 你的解決方案只在onResume()方法..

+0

是的,我也這麼認爲。問題中的方法都是從onResume方法調用的。 onResume方法總是在onCreateMethod之後調用,這意味着無論活動是創建還是恢復,都會調用這些方法。 arrayAdapter的方便性應該是它爲你設置了監聽器,而監聽器實際上是'this',還是我錯了? – Geir

相關問題