这可能表明了对活动生命周期最令人震惊的缺乏理解,但请表示同情。我最终想要多次从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-based TextView中的文本设置为mess1。在单击Child中的Child按钮时,我们将子活动(当然,系统将返回给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();
}
}
);
}发布于 2015-10-20 22:44:54
很可能您正在返回回栈历史记录,并且正在恢复先前处于暂停状态的活动,因此不调用onCreate,而是调用(初始活动的) onResume。
不建议以这种方式使用全局状态,但是如果您在onResume方法中放置了适当的代码,则这种方法应该可以工作。
https://stackoverflow.com/questions/33247865
复制相似问题