从今天下午早些时候开始,我一直在关注一个奇怪的行为,我正在放弃理解,但也许有人有想法(是的,我是初学者,有些人可能有想法 ^^)。
情况 :
MainActivity.java(第一个被调用,这里只关心一个)
public ExpandableListView listClubs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listClubs = (ExpandableListView) findViewById(R.id.expLstMainClubs);
AppGlobal.CreateDistricts() ;
ELVAdapterDistrictsClubs adapter = new ELVAdapterDistrictsClubs(this);
listClubs.setAdapter(adapter);
}
这是类中唯一的代码。基本上,我使用一个适配器填充 ExpandableList,该适配器依赖于 CreateDistricts() 方法中创建的内容(创建业务对象、包含包含会员的俱乐部、活动等的区域)。
基本上(再次 ^^),一切运行良好,在第一次启动时,ExpList 按预期工作,以及应用程序的其余部分。但是,如果我从 MainActivity 中单击后退按钮并重新运行应用程序,则会发生“奇怪”(至少对我而言)行为:
ExpList 连续加载两次 - 第一个与数据一起加载,工作正常,并且在副本下方(具有相同的 2 个组,即这里是我的示例数据中仅有的两个区),这根本不起作用(如果您尝试扩展它,它会使应用程序崩溃)。
坦率地说,我迷路了 - 我在 [Pause/Stop/Destroy/Start/Resume] 等上尝试了一些东西,但无济于事(因此,这方面还没有做任何事情,没有覆盖,因为它似乎没有带来任何好处)。
由于 onCreate 将在 onDestroy 加载捆绑包之后,它应该加载 ExpList 原样,在这种情况下,“旧”组/子代和实际组/子代之间可能存在冲突(当前,数据是模拟的,但会之后来自远程数据源),我还没有决定最好的“保存”行为是什么,即我是否应该找到一种方法来消除 ExpList onDestroy 以确保它 100% 重新创建(以及如何有人这样做吗?)并从头开始,或者如果我可以按原样使用 ExpList,同时更新其内容,以免丢失先前的选择。为了做到这一点,使事情复杂化可能是无关紧要的,第一个列表不是那么大,而且很快就可以用来达到第二个活动......
无论如何,我怀疑它来自那个部分,销毁和重新运行后的捆绑加载,它是否按原样重新加载 ExpList 然后我添加东西而不是首先删除?我发现令人困惑的是,下一个活动(只需单击 ExpList 的一项即可到达)显示类似的 ExpList(填充所选俱乐部的每月和每月事件),并且在之后不呈现相同的奇怪行为破坏...并且两者在其原始 xml 布局中都有几乎相同的 ExpList 声明,所以...好吧,也许明天早上我会看到曙光,但如果有人有想法,请随意:D
我写的越多,我就越认为我应该首先清除 ExpList 但是......我不知道如何准确。我试过了
listClubs.removeViewsInLayout(0, listClubs.getCount()) ;
但它似乎没有做任何事情。
提前致谢