3

几天来我一直试图弄清楚这一点,在搜索和搜索和搜索之后我放弃了并决定询问社区。任何帮助是极大的赞赏。我正在扩展 BaseExpandableListAdapter 并使用延迟图像加载技术将 svg 图形解析为可绘制对象并将这些可绘制对象设置为我的可扩展列表的子项。一切都很完美。

在后台解析和加载 svg 时,会生成可展开列表并处于折叠状态。如果用户展开一个组并且孩子们还没有完成加载,则会显示一个简单的“正在加载...”消息。只要任何一个 AsyncTasks 完成并在 onPostExecute 上触发,可扩展列表视图就会更新为另一个可绘制对象,并且任何扩展组都会重置回折叠状态。

问题: 我无法弄清楚如何保存组的展开/折叠状态,以便在 AsyncTasks 更新我的列表时它们不会被重置。似乎在显式调用 onContentChangedExtended() 时,整个列表被重置回其初始状态,而当 Activity 隐式更新视图时,它会保存展开/折叠状态。它是如何做到的?

并且最初强制所有组进行扩展不是一种选择,因为它超出了可扩展列表的全部目的。

public class ListAdapter<T> extends BaseExpandableListAdapter {
  // Some implementation here.
}

这是填充组的子对象:

public class Expression {
  /* Some implementation here.
   * .
   * .
   * .
   */

  // ListViewGenerator extends ExpandableListActivity
  private class ParseSVG extends AsyncTask<ListViewGenerator, Void, ListViewGenerator> {
    /* Parse svg in background.
     * .
     * .
     * .
     */
    @Override
    protected void onPostExecute(ListViewGenerator listView)
      {listView.onContentChangedExtended();}
  }
}

我尝试将 getGroupView() 中的 isExpanded 保存到布尔数组,并尝试从 ExpandableListActivity 恢复展开/折叠状态,但没有运气,只要调用 onContentChangedExtended(),getGroupView() 就已经重置回折叠状态状态所以我的数组被清除并设置为“折叠”......

先感谢您!

4

0 回答 0