0

我有一些代碼,應該允許用戶刪除一個文件夾(它做),那麼它應該從'最近的文件夾'列表中刪除 - 但事實並非如此。該文件夾即使在用戶刪除後仍會保留在「最近的文件夾」列表中 - 這是不希望的。無法刷新列表沒有方向更改 - Android/Java

/** 
* Add recent folders to the list in order as acquired by the {@link RecentFolderList}. 
* 
* @param destination List of drawer items to populate 
*/ 
private void addRecentsToList(List<DrawerItem> destination) { 
    // If there are recent folders, add them. 
    final List<Folder> recentFolderList = getRecentFolders(mRecentFolders); 
    // Remove any excluded folder types 
    if (mExcludedFolderTypes != null) { 
     final Iterator<Folder> iterator = recentFolderList.iterator(); 
     while (iterator.hasNext()) { 
      if (isFolderTypeExcluded(iterator.next())) { 
       iterator.remove(); 
      } 
     } 
    } 
    if (recentFolderList.size() > 0) { 
     destination.add(DrawerItem.ofHeader(mActivity, R.string.recent_folders_heading, 
     mBidiFormatter)); 
     // Recent folders are not queried for position. 
     for (Folder f : recentFolderList) { 
      destination.add(DrawerItem.ofFolder(mActivity, f, DrawerItem.FOLDER_RECENT, 
      mBidiFormatter)); 
     } 
    } 
} 

奇怪的部份是,如果我執行的方向變化 - 文件夾從「最近的文件夾列表」移除所需 - 而我不能確定爲什麼這可能發生的。

我有一種感覺,列表可能只需要刷新(文件夾被刪除後),但我不確定。

任何建議,線索或指針,不勝感激。

全部來源:

http://pastebin.com/fiX4S9fB

附:

適配器上調用notifyDataSetChanged()(由下面的答案之一的建議 - 和任何人檢舉這個重複的 - 似乎沒有產生任何影響)上ListView

+0

[如何刷新Android列表視圖?](http://stackoverflow.com/questions/2250770/how-to-refresh-android-listview) – 2014-11-21 17:25:07

+0

這不是重複 - 我們已經嘗試notifyDatasetChanged和它不工作...(請參閱下面的答案/評論)還有其他事情在這裏 – 2014-11-21 18:04:26

+0

注意刪除那個重複的標誌?文章中顯示的修復程序不起作用(notifyDataSetChanged不能解決問題) – 2014-11-21 18:19:58

回答

0

呼叫invalidate方法導致刷新或adapter上的notifyDatasetChanged

+0

mListView.invalidate();不刷新mRecentFolders(我需要刷新近期文件夾列表中明確)和無效不是mRecentFolders – 2014-11-21 17:31:28

+0

的選擇我實現它如下 - 在最近的文件夾列表中仍然包含它已被刪除後,被刪除的文件夾: HTTP:/ /pastebin.com/pCxeTv5X ...並改變方向還是刪除它。 – 2014-11-21 17:47:57

+0

看到我做錯了什麼?我仍然不確定爲什麼最近的文件夾列表不會更新(不改變方向)。不瞞你說 - 我想notifyDatasetChanged會做到這一點 - 除非也許有一個問題,我的W¯¯包或其他東西覆蓋它),如果你看到什麼我應該知道的 - 請讓我知道。 – 2014-11-21 19:49:02

0

如果您執行方向更改,則您的活動將被破壞並重建。那麼你的成員變量mRecentFolders可能是空的。爲了防止這種情況在AndroidManifest.xml中添加的最後一行在下面的代碼到你的活動:

<activity 
android:name="name" 
android:label="label" 
android:configChanges="orientation|keyboardHidden|screenSize"> /*add this line*/ 
+0

我不想阻止刷新的方向變化「最近的文件夾列表」 ......這是好的 - 我想刷新近期的文件夾列表,一旦該文件夾已被刪除(然後顯示與刪除列表文件夾從中刪除)如何完成? – 2014-11-21 17:38:18

+0

請參閱我可能會看到的其他內容? – 2014-11-21 19:49:18

0

我看着你的代碼,它好像你有很多你的工作列表中的不同副本用。我的猜測是,你正在從一個列表中刪除文件夾,但不是從其他列表中刪除。

Android工作中的方式ListAdapter是:通過引用數據源(例如列表或數組)來創建它們,然後當您更改該數據源時,必須使用notifyDataSetChanged()來通知它們,這是他們的責任刷新視圖。如果你的情況沒有發生,這意味着你創建你的列表適配器的數據源沒有得到更新......這只是你的內部應用程序邏輯的問題,並且與Android無關。

此外,我注意到你的代碼有多個適配器,其中一些覆蓋notifyDataSetChanged(),並且不會調用超級實現。確保你沒有通過這樣做打破連鎖。

呵呵,當你旋轉屏幕時刷新它的原因是整個Activity在那個時候被重新創建,並且所有的數據都被從最終源重新加載,就好像你正在打開那個屏幕第一次(或者根據Activity的舊實例傳遞的數據,如果你已經這樣設置的話)。

+0

好的。我很感激...我認爲這是奇怪的notifyDataSetChanged()不會刷新最近的文件夾列表。你有沒有在我的邏輯中看到具體的東西來防止這種情況的發生?我開始認爲這可能與我把從包獲取數據做 - 但我不知道在這一點(這已被絆倒我天) – 2014-11-21 18:51:58

+0

你看特別是我什麼應該專注於......我從來沒有想過刷新myRecentFolders列表會非常棘手。 – 2014-11-21 19:37:24

+0

或者展示我如何實現超級實現以正確刷新它? (我會很樂意測試,並在幾分鐘之內接受你的答案,如果我們可以得到它的工作) – 2014-11-21 19:43:11