这可能表明对活动生命周期缺乏了解最令人震惊,但请同情。我最终想要从Activity B
多次调用Activity A
,每次都将不同的参数传递给Activity B
,然后由用户响应并存储/设置各种公共变量。作为此的前提,我只想了解Activity A
Activity B
如何看到Common.java
已更改的公共变量的变化。
我有三个非常简单的类:MainActivity.java
包含公共变量,主要活动Child.java
和子活动mess1
。现在只有一个公共变量;它是字符串"***"
,它被初始化为mainbutton
。目前所有代码都是在MainActivity
中点击Child
时,会调用Child
。在mess1
中,我们立即将"Child here"
设置为Child
,然后将文本设置为基于TextView
的{{1}}到mess1
。点击childbtn
中的Child
按钮后,我们finish()
了一项子活动(当然系统会将我们返回MainActivity
。
运行此应用时,我们会看到MainActivity
中显示的三颗星。按下mainbutton
后,我们转到Child
并显示"Child here"
。当按下childbtn
时,我们会返回MainActivity
但是,虽然我们确定mess1
现在拥有"Child here"
,但仍有三颗星仍在那里。
我的问题是:
1.当我们知道mess1
已被更改时,为什么MainActivity
在"***"
活动返回后仍然显示Child
?
2.我需要在代码中更改什么才能显示"Child here"
?
相关代码摘录如下。在此先感谢您的帮助。
Common.java
public class Common
{
public static String mess1 = "***";
}
MainActivity.java
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mainbutton = (Button)findViewById(R.id.mainbutton);
TextView maintop = (TextView)findViewById(R.id.maintop);
mainbutton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
startActivity(new Intent(MainActivity.this, Child.class));
}
});
maintop.setText(Common.mess1);
}
Child.java
public class Child extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_child);
TextView childtext = (TextView) findViewById(R.id.childtext);
final Button childbtn = (Button) findViewById(R.id.childbtn);
Common.mess1 = "Child here";
childtext.setText(Common.mess1);
childbtn.setOnClickListener
(new View.OnClickListener()
{public void onClick(View v)
{finish();
}
}
);
}
答案 0 :(得分:2)
可能你正在回溯堆栈历史记录,并且你正在恢复之前处于暂停状态的活动,因此onCreate没有被调用,而是onResume(初始活动的)...
不建议以这种方式使用全局状态,但是如果将相应的代码放在onResume方法中,这应该可行。
答案 1 :(得分:0)
您应该在onResume()
的{{1}}中设置文字。当您从MainActivity
Child.java
(而不是onResume()
)返回时,系统会调用onCreate()
的文本仅在maintop
中设置,因此没有任何更改返回。
onCerate()