在我的申请表中我有3个活动。第一个 - 我开始活动#2的主要部分。从#2开始我开始#3,同时我完成#2。当我完成#3时,我会自动回到#1。问题:如何从3回到1时添加/运行代码?
不确定它是否有意义。但我想要做的是,当结束#3并回到#1时,我想检查文件xyz是否存在并基于它来改变活动#1中的UI。
#1中的OnResume未运行,从不运行。 (对于第一个活动,可能系统不会暂停运行)
如果只有活动#1和2,我可以使用startActivityForResult。但是有两项活动没有做我需要的......
答案 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 onPause()/ onResume()?你确定吗?这不太可能。 Android文档说明了onPause():
(...)当活动B在活动A前面启动时,此回调将会 在A.的onPause()返回,(...)
之前,不会创建A.
在我看来,您应该考虑使用fragments而不是多项活动。
答案 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的变量。