Activity A 被 Activity B 更改后,如何在 Activity A 中显示 public 文本

How do I display public text in Activity A after it has been changed by Activity B

这可能表明对 activity 生命周期的理解最令人震惊,但请同情。我最终想要多次从 Activity A 调用 Activity B,每次将不同的参数传递给 Activity B,然后由用户和 stores/sets 响应各种 public 变量。作为这方面的先驱,我只想了解 Activity A 如何看待 Activity B 已更改的 public 变量的变化。

我有三个非常简单的 类:Common.java 包含 public 变量,主要 activity MainActivity.java 和 child activity Child.java。现在只有一个 public 变量;它是初始化为 "***" 的字符串 mess1。目前所有代码所做的是在 MainActivity 中单击 mainbutton 时,它会调用 Child。在 Child 中,我们立即将 mess1 设置为 "Child here",然后将基于 ChildTextView 中的文本设置为 mess1。单击 Child 中的 childbtn 按钮后,我们 finish() child activity(当然系统 return 将我们 MainActivity.

当此应用程序为 运行 时,我们会看到 MainActivity 中显示的三颗星。当按下 mainbutton 时,我们转到 Child 并看到 "Child here" 显示。当按下 childbtn 时,我们 return 到 MainActivity 但是,三颗星仍然存在,尽管我们确定 mess1 现在成立 "Child here"

我的问题是: 1.为什么当我们知道mess1已经改变了,MainActivity仍然从Childactivity显示在return上"***"? 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 方法中放置适当的代码,这应该可行。

您应该在 MainActivityonResume() 中设置文本。当您从 Child.java 返回时,将调用 onResume()(而非 onCreate()),并且由于 maintop 的文本仅在 onCerate() 中设置,因此不会对其进行任何更改return.

protected void onResume() {
     super.onResume();

     maintop.setText(Common.mess1);
 }

参考:Activity Lifecycle and Implementing the lifecycle callbacks