在活动B更改公共文本后,如何在活动A中显示公共文本

时间:2015-10-20 22:24:42

标签: android android-activity activity-lifecycle

这可能表明对活动生命周期缺乏了解最令人震惊,但请同情。我最终想要从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();
                 }
             }
            );
}

2 个答案:

答案 0 :(得分:2)

可能你正在回溯堆栈历史记录,并且你正在恢复之前处于暂停状态的活动,因此onCreate没有被调用,而是onResume(初始活动的)...

不建议以这种方式使用全局状态,但是如果将相应的代码放在onResume方法中,这应该可行。

答案 1 :(得分:0)

您应该在onResume()的{​​{1}}中设置文字。当您从MainActivity Child.java(而不是onResume())返回时,系统会调用onCreate()的文本仅在maintop中设置,因此没有任何更改返回。

onCerate()

参考:Activity LifecycleImplementing the lifecycle callbacks