2013-06-13 57 views
2

我有一个Activity1,它启动了Activity2Activity2有一个列表,显示了数据库中的一些值。活动第二次启动时的奇怪行为

Activity2启动首次列表中显示了正确的信息,但如果我按后退按钮,然后启动Activity2再次它正确加载从数据库中的信息,但它没有显示在清单中。

启动代码Activity2Activity1

final Intent int2 = new Intent(getActivity(), CombinationsManagerActivity.class); 
MyActivity.insertSomeExtraInfoToTheIntent(int2, currentEmployee.id); 
getActivity().startActivity(int2); 

而且Activity2列表的代码是这样(我叫它当活动是与服务器(的onResume后)寄存器):

private void fillList() { 

     list = (ListView) findViewById(R.id.list_combinations); 
     ZKEmployeeLoginCombination combinations = ZKEmployeeLoginCombination.selectLoginCombinationsByEntityID(this, idEmployee); 
     LoginCombinationsListAdapter adapter = new LoginCombinationsListAdapter(this, combinations, enrolledTypes); 
     list.setAdapter(adapter); 

    } 

另外,Activity2清单声明:

<activity 
      android:name="com.blabla.android.app.employeemanagementv3.CombinationsManagerActivity" 
      android:label="@string/combinations_manager" > 
     </activity> 

任何帮助,将不胜感激。

+0

我不知道真的为什么发生这种情况,但对于给一个尝试,如果你是调用完成(),当你在第二个活动按后退按钮?你试过这个吗? – Opiatefuchs

+0

你在哪里调用了这个方法fillList()。 – Sam

+0

另一种可能性是Activity2每次都在同一个任务中打开。建议在您的清单中添加'android:launchMode =“singleTop”' – verybadalloc

回答

1

最后,我发现了我的代码上的错误:对于项目需求,我们保留一些结构作为服务器事件的侦听器。而registration就是其中之一。

登记从活动的听众的方法是:

private static IncomingEventHandler eventHandler = new IncomingEventHandler(); 
... 
if(eventHandler.get(this.name) == null){ 
eventHandler.add(this.name, this); 
} 

所以我保持从以前的活动的引用,然后,当活动收到registration情况下,我们在后期在做:

referenceToActivity.doSomeStuffOnUIThreadAfterRegister(); 

这行之有效的第一次,但在第二个执行referenceToActivity分别指向第一个活动

0

你可能只想在那里有一个Activity2在应用程序中存活。如果是这样,我建议您在活动2的清单中包含以下内容:

android:launchMode="singleTask" 

这可以解决您的问题。有关说明,请参见the android documentation

+0

谢谢,我试过了(也是singleTop),但结果是一样的。 –

+0

在这种情况下,我不确定。我建议你通过加入'Log.d(...)'来确定执行路径,以确定第二个activity2对象是否与第一次是同一个对象,查找正在创建和销毁的活动检查一切正常,等等等等。祝你好运! – Stochastically

0

刚通过把这个代码片断上的活性2类

@Override 
    public void onBackPressed() { 
     Intent startNewActivityOpen = new Intent(Activity2.this, Activity1.class); 
     startActivity(startNewActivityOpen); 

    }