0

从今天下午早些时候开始,我一直在关注一个奇怪的行为,我正在放弃理解,但也许有人有想法(是的,我是初学者,有些人可能有想法 ^^)。

情况 :

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()) ;

但它似乎没有做任何事情。

提前致谢

4

1 回答 1

0

与 Android 行为无关 - 如果 Districts 的基本 ArrayList 不为空,我每次都在重新创建整个 BO 集合......而不是简单地退出该方法,但它提出了另一个问题 - 这个 ArrayList 的状态如何,在我的清单中用作 Application 的子类中声明?我将不得不对此进行一些测试...

于 2013-04-26T08:02:13.063 回答