这可能表明了对 Activity 生命周期最严重的缺乏理解,但请予以同情。我最终想要调用 Activity B
来自Activity A
多次,每次将不同的参数传递给 Activity B
然后由用户响应并存储/设置各种公共(public)变量。作为这一切的先导,我只想弄清楚如何 Activity A
看到对公共(public)变量的更改 Activity B
已改变。
我有三个非常简单的类:Common.java
保存公共(public)变量,主要 Activity MainActivity.java
和 child 的 Activity Child.java
。目前只有一个公共(public)变量;这是字符串mess1
初始化为 "***"
。目前所有代码所做的都是当 mainbutton
时被点击 MainActivity
,它调用Child
。在 Child
,我们立即设置mess1
至"Child here"
然后将文本设置为 Child
基于TextView
至mess1
。单击 childbtn
按钮位于 Child
,我们finish()
子 Activity (当然,系统返回 MainActivity
。
当这个应用程序运行时,我们会看到MainActivity
中显示三颗星。 。当mainbutton
按我们去Child
并参见"Child here"
显示。当 childbtn
按下后,我们返回MainActivity
但是,三颗星仍然在那里,尽管我们确信 mess1
现在持有"Child here"
.
我的问题是:
1. 为什么,当我们知道mess1
时已更改,MainActivity
仍然显示"***"
从 Child
返回时 Activity ?
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();
}
}
);
}
最佳答案
可能您正在返回返回堆栈历史记录,并且正在恢复处于暂停状态的上一个 Activity,因此不会调用 onCreate,而是调用 onResume(初始 Activity 的)。
不建议以这种方式使用全局状态,但如果您在 onResume 方法中放置适当的代码,这应该可行。
关于android - 当 Activity B 更改公共(public)文本后,如何在 Activity A 中显示公共(public)文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33247865/