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"
,然后将基于 Child
的 TextView
中的文本设置为 mess1
。单击 Child
中的 childbtn
按钮后,我们 finish()
child activity(当然系统 return 将我们 MainActivity
.
当此应用程序为 运行 时,我们会看到 MainActivity
中显示的三颗星。当按下 mainbutton
时,我们转到 Child
并看到 "Child here"
显示。当按下 childbtn
时,我们 return 到 MainActivity
但是,三颗星仍然存在,尽管我们确定 mess1
现在成立 "Child here"
。
我的问题是:
1.为什么当我们知道mess1
已经改变了,MainActivity
仍然从Child
activity显示在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 方法中放置适当的代码,这应该可行。
您应该在 MainActivity
的 onResume()
中设置文本。当您从 Child.java
返回时,将调用 onResume()
(而非 onCreate()
),并且由于 maintop
的文本仅在 onCerate()
中设置,因此不会对其进行任何更改return.
protected void onResume() {
super.onResume();
maintop.setText(Common.mess1);
}
参考:Activity Lifecycle and Implementing the lifecycle callbacks
这可能表明对 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"
,然后将基于 Child
的 TextView
中的文本设置为 mess1
。单击 Child
中的 childbtn
按钮后,我们 finish()
child activity(当然系统 return 将我们 MainActivity
.
当此应用程序为 运行 时,我们会看到 MainActivity
中显示的三颗星。当按下 mainbutton
时,我们转到 Child
并看到 "Child here"
显示。当按下 childbtn
时,我们 return 到 MainActivity
但是,三颗星仍然存在,尽管我们确定 mess1
现在成立 "Child here"
。
我的问题是:
1.为什么当我们知道mess1
已经改变了,MainActivity
仍然从Child
activity显示在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 方法中放置适当的代码,这应该可行。
您应该在 MainActivity
的 onResume()
中设置文本。当您从 Child.java
返回时,将调用 onResume()
(而非 onCreate()
),并且由于 maintop
的文本仅在 onCerate()
中设置,因此不会对其进行任何更改return.
protected void onResume() {
super.onResume();
maintop.setText(Common.mess1);
}
参考:Activity Lifecycle and Implementing the lifecycle callbacks