4

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

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

#1 中的 OnResume 不会运行,永远不会。(可能系统不会为第一个活动运行 onpause)

如果只有活动 #1 和 2,我可以使用 startActivityForResult。但是两项活动并不能满足我的需要...

4

5 回答 5

9

请参见下面的示例。

你的活动#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();
}


}
于 2012-11-05T08:59:59.957 回答
0

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

这有点杂乱无章,但效果很好。

于 2012-11-04T15:54:51.140 回答
0

有多个方面需要考虑:

  1. 为什么在#1 onPause()/onResume() 中没有被调用?你确定吗?这是非常不可能的。Android 文档说onPause()

    (...) 当活动 B 在活动 A 之前启动时,将在 A 上调用此回调。在 A 的 onPause() 返回之前不会创建 B,(...)

  2. 在我看来,您应该考虑考虑使用片段而不是多个活动。

  3. 快速修复可能是在完成 #3 时为 #1 调用 startActivity。您只需确保 #1 的启动模式设置为 singleTop。
于 2012-11-04T16:42:35.843 回答
0

在您的活动 1 上创建一个方法:

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

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

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

希望它会奏效。

于 2019-01-24T15:59:44.433 回答
-1

您可以在 Activity #3 的 OnPause 中编写一个首选项变量(类似于 Activity3Finished=true) 现在您可以检查每个 Activity 是否 Activity #3 已完成。

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

于 2012-11-04T15:51:37.473 回答