2015-10-20 56 views
2

这可能表明对活动生命周期的理解最令人震惊,但请同情。我最终会想要从Activity A多次调用Activity B,每次都将一个不同的参数传递给Activity B,然后由用户响应并存储/设置各种公共变量。作为这方面的先驱,我只想让我的脑袋围绕Activity A看到Activity B已更改的公共变量的变化。如何在活动A更改活动B后显示公共文本

我有三个非常简单的类:Common.java持有公共变量,主要活动MainActivity.java和儿童活动Child.java。目前只有一个公共变量;它是字符串mess1,它被初始化为"***"。目前所有的代码在MainActivity中点击mainbutton时,它调用Child。在Child中,我们立即将mess1设置为"Child here",然后将基于Child的文本TextView设置为mess1。在点击Childchildbtn按钮,我们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

您应该设置的文本MainActivity。当你从Child.javaonResume()(不是onCreate())被调用,并且因为maintop的文本仅设置在onCerate()中,所以返回时不会改变它。

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

    maintop.setText(Common.mess1); 
} 

参考:Activity LifecycleImplementing the lifecycle callbacks

+0

谢谢,奥尼克。这就是诀窍! Onik。 –

+1

接受完成,Onik。也许你可以帮助我的下一篇文章(刚刚发布),即“在Android Studio中,不能从Activity A多次调用Activity B”。 –

2

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

使用全局状态this我们不建议这样做,但如果你在onResume方法中放置适当的代码,这应该起作用。

+0

谢谢你,biggerScala。 –

相关问题