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