android - 当 Activity B 更改公共(public)文本后,如何在 Activity A 中显示公共(public)文本

标签 android android-activity activity-lifecycle

这可能表明了对 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基于TextViewmess1 。单击 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/

相关文章:

android - 两个或多个 AutoCompleteTextView 不工作

java - 如何从Viewpager返回值: OnPageSelected?

android - 在 Activity 之间传递类的实例

android - WebView 显示白页,但事件正常

android - 我们可以使用 Android 支持库将 Intent.EXTRA_ALLOW_MULTIPLE 用于旧版本的 Android API 级别吗?

android - 如何与 USB 串行端口通信 Android 配件?

android - 使用 Google Cloud Messaging 云连接服务器 (XMPP) 的上游文件

android - Activity 何时可见?在 onStart() 或 onResume() 之后?

android - 开始 Activity 后立即调用 OnPause 和 OnStop()

android - 如果我不在 Activity onDestroy() 中将 Dagger 2 Component 设置为 null 会怎样?