如何在返回活动时运行代码

时间:2012-11-04 15:46:33

标签: android android-activity android-lifecycle

在我的申请表中我有3个活动。第一个 - 我开始活动#2的主要部分。从#2开始我开始#3,同时我完成#2。当我完成#3时,我会自动回到#1。问题:如何从3回到1时添加/运行代码?

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

#1中的OnResume未运行,从不运行。 (对于第一个活动,可能系统不会暂停运行)

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

5 个答案:

答案 0 :(得分: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();
}


}

答案 1 :(得分:0)

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

它有点像kludge,但效果很好。

答案 2 :(得分:0)

需要考虑多个方面:

  1. 为什么没有调用#1 onPause()/ onResume()?你确定吗?这不太可能。 Android文档说明了onPause()

      

    (...)当活动B在活动A前面启动时,此回调将会   在A.的onPause()返回,(...)

    之前,不会创建A.
  2. 在我看来,您应该考虑使用fragments而不是多项活动。

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

答案 3 :(得分:0)

根据主动性1进行方法:

public void changeViewsMethod(){
    textView.setText("demo");
}

现在在您的活动2上执行此操作:

@Override
public void onBackPressed() {
    super.onBackPressed();
    ((YOU_ACTIVITY1) getApplicationContext()).changeViewsMethod();
}

希望它会起作用。

答案 4 :(得分:-1)

你可以在活动#3的OnPause中编写一个偏好变量(类似于Activity3Finished = true) 现在,如果活动#3已经完成,您可以签入每个活动。

别忘了重置#3中OnCreate的变量。