2012-11-04 31 views
2

在我的应用程序中我有3个活动。第一个 - 我开始活动#2的主体。从#2开始#3,同时我完成#2。当我完成#3时,我会自动回到#1。问题:如何在从3回到1时添加/运行代码?如何在返回活动时运行代码

不确定是否有意义。但是我想要做的是,当结束#3并回到#1时,我想检查文件xyz是否存在,并基于它来更改活动#1中的UI。

#1的OnResume没有运行,从不。 (可能系统不会为第一个活动运行onpause)

如果只有活动#1和2,我可以使用startActivityForResult。但两项活动没有做什么,我需要......

+0

如果发布一些你的代码会更容易理解,但也有不同你可以做到这一点。您可以在活动#1中创建一个方法,并从#3中调用该方法。或者把它放在onCreate()中,根据一定的标准调用 – codeMagic

+1

我怎样才能从#3中调用在#1中创建的方法?将代码放在onCreate中并不能帮助我.. – Radiak

+0

mainActivity。方法名(); – codeMagic

回答

7

看下面的例子。

您的活动#1代码是这样的

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

@Override 
protected void onRestart() { 
// TODO Auto-generated method stub 
super.onRestart(); 

      //Do your code here 
} 
} 

您的活动#3代码是这样的

public class Activity3 extends Activity{ 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity3); 
} 
@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    finish(); 
} 


} 
+0

不幸的是我想从MainActivity布局改变UI(禁用/启用)按钮。如果我想用你的方法需要使用静态方法。但是,然后我得到错误findViewById'按钮mainI =(按钮)findViewById(R.id.b_main)' – Radiak

+0

你应该在backPress()finish()该活动和活动#1 onRestart()put你的代码。我已经更新了代码。 –

+0

其工作......我的身边..... –

-1

如果活动#3已经完成你可以在写的onPause的活动#偏好变量3(像Activity3Finished = TRUE) 现在你可以在每一个活动检查。

不要忘记在#3的OnCreate中重置变量。

+0

是的,但我不知道在哪里把代码,将检查#3状态。我不需要检查每秒钟/分钟检查状态。我认为从#3回到#1后运行代码会更容易。 – Radiak

+0

你的意思是什么?你不需要检查每一秒,只有当你的条件为真时才设置标志 – Michele

+0

我不明白'flag'是什么意思。国际海事组织我把它想象成单个'如果条件'的代码放在某个地方。我对么? – Radiak

0

从活动#1开始,不要开始活动#2。相反,开始活动#3,在意图中传递一个标志以告诉活动#3开始活动#2。如果活动#3从onCreate内部调用startActivity,则不会有屏幕闪烁。这样,活动#1可以使用startActivityForResult并从活动#3获得结果。

这是一个kludge,但它很好地工作。

+0

真的很有趣的想法,会考虑一下 – Radiak

0

有多个方面来考虑:

  1. 为什么在#1的onPause()/的onResume()不叫?你确定吗?这是不可能的。 Android的文件说,大约onPause()

    (...)当活动B在活动A的前推出时,这个回调将 被上不会直到公司创建的onPause A,B()调用返回(...)

  2. 在我看来,你应该考虑到考虑使用fragments而不是多个活动。

  3. 快速修复可能是在完成#3时调用#1的startActivity。您只需确保将#1的launch mode设置为singleTop。
+0

我已经把活动#1中的一些代码(只是Log.d进行测试)放在onResume中。当我从#3回来(有时甚至几分钟后)onresume代码永远不会被称为 – Radiak

+0

使用onrestart而不是onresume .. –

+0

我不知道为什么,但活动#1 mainrest onrestart,当我回来时不叫从#3开始。 public void onRestart(Bundle savedInstanceState){ \t Log.d(TAG,“onrestart在main.java中运行”); } – Radiak

相关问题