在 onCreate 中初始化变量,但在 onResume() 中更新它们
Initializing variables in onCreate, but updating them in onResume()
这是我的情况:
我有一个如下所示的 OnCreate 代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bunz = Bunz.getInstance(); //getting instance of bunz
bunz.setBunz(50);
bunz.setMoney(0);
bunz.setIncrement(1);
Button upgradeButton = (Button) findViewById(R.id.upgradeButton);
upgradeButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent startIntent = new Intent(getApplicationContext(), UpgradeMenu.class);
startActivity(startIntent);
}
});
moneyCount = (TextView) findViewById(R.id.moneyCount);
bunzCount = (TextView) findViewById(R.id.bunzCount);
ImageButton bun = (ImageButton) findViewById(R.id.bun);
}
请注意在我的 OnCreate 代码中,我做了两件事;首先,我初始化我需要的所有值:
bunz.setBunz(50);
bunz.setMoney(0);
bunz.setIncrement(1);
然后我在 TextView 上显示这些值并设置一些按钮和意图:
Button upgradeButton = (Button) findViewById(R.id.upgradeButton);
upgradeButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent startIntent = new Intent(getApplicationContext(), UpgradeMenu.class);
startActivity(startIntent);
}
});
moneyCount = (TextView) findViewById(R.id.moneyCount);
bunzCount = (TextView) findViewById(R.id.bunzCount);
ImageButton bun = (ImageButton) findViewById(R.id.bun);
我是 Android 工作室的新手,这是我遇到的问题。每次返回到此 activity 时,我都想使用 onResume() 更新 TextView 中的这些值(我在另一个 activity 中更新它们)。但是,如果我将 onCreate 中的所有代码移到 onResume 中,那么每次我返回此 activity,值将设置为 50,0 和 1。我知道我可以使用布尔值,这样onCreate()在应用程序第一次启动时触发,但onResume()不触发,之后onResume()触发,只需将onCreate的后半部分代码复制并粘贴到onResume()中,但似乎效率低下,这不是 Android studio 设计的工作方式。我可以以某种方式在另一个位置初始化值吗?
我有一个全局 Bunz class,如下所示:
public class Bunz {
private int bunz;
private int money;
private int increment;
//singleton code
private static Bunz instance;
private Bunz(){
}
public static Bunz getInstance(){
if (instance == null){
instance = new Bunz();
}
return instance;
}
public int getBunz() {
return bunz;
}
public void setBunz(int num){
bunz = num;
}
public int getMoney(){
return money;
}
public void setMoney(int num){
money = num;
}
public int getIncrement(){
return increment;
}
public void setIncrement(int num){
increment = num;
}
}
也许我可以在这里初始化这些值?
谢谢!
您还可以做一件事:
public static Bunz getInstance(){
if (instance == null){
instance = new Bunz();
instance.setBunz(50);
instance.setMoney(0);
}
return instance;
}
在此处创建实例时,请尝试在此处设置您想要的值,而不是在应用程序的 onCreate 中。
您也可以在构造函数中进行更改。
虽然您的代码使用了静态,但我认为这是不必要的。静态不是你的普通 goto 解决方案,它们伴随着不符合 GC 条件的对象的高昂代价。
您可以通过 onActivityResult
方法从第二个 activity 获得结果。
First, start second activity using startAtivityForResult()
//This takes in a request code(Int), it can be whatever you set.
第一个activity
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent , 100);
第二个Activity
//Do you work in the second activity, generate new data
Intent returnIntent = new Intent();
returnIntent.putExtra("bunz", 100);
returnIntent.putExtra("money", 200);
returnIntent.putExtra("increment", 2);
setResult(Activity.RESULT_OK, returnIntent);
finish();
捕获第二个Activity结果
这段代码应该写在你的第一个 activity.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 100) { //Remember the code we set in startActivityForResult? This is where we identify our work
if(resultCode == Activity.RESULT_OK){ //Code to check if data is passed
Int bunz =data.getIntExtra("bunz")
bunz.setBunz(bunz)
.....
}
}
}
这是我的情况: 我有一个如下所示的 OnCreate 代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bunz = Bunz.getInstance(); //getting instance of bunz
bunz.setBunz(50);
bunz.setMoney(0);
bunz.setIncrement(1);
Button upgradeButton = (Button) findViewById(R.id.upgradeButton);
upgradeButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent startIntent = new Intent(getApplicationContext(), UpgradeMenu.class);
startActivity(startIntent);
}
});
moneyCount = (TextView) findViewById(R.id.moneyCount);
bunzCount = (TextView) findViewById(R.id.bunzCount);
ImageButton bun = (ImageButton) findViewById(R.id.bun);
}
请注意在我的 OnCreate 代码中,我做了两件事;首先,我初始化我需要的所有值:
bunz.setBunz(50);
bunz.setMoney(0);
bunz.setIncrement(1);
然后我在 TextView 上显示这些值并设置一些按钮和意图:
Button upgradeButton = (Button) findViewById(R.id.upgradeButton);
upgradeButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent startIntent = new Intent(getApplicationContext(), UpgradeMenu.class);
startActivity(startIntent);
}
});
moneyCount = (TextView) findViewById(R.id.moneyCount);
bunzCount = (TextView) findViewById(R.id.bunzCount);
ImageButton bun = (ImageButton) findViewById(R.id.bun);
我是 Android 工作室的新手,这是我遇到的问题。每次返回到此 activity 时,我都想使用 onResume() 更新 TextView 中的这些值(我在另一个 activity 中更新它们)。但是,如果我将 onCreate 中的所有代码移到 onResume 中,那么每次我返回此 activity,值将设置为 50,0 和 1。我知道我可以使用布尔值,这样onCreate()在应用程序第一次启动时触发,但onResume()不触发,之后onResume()触发,只需将onCreate的后半部分代码复制并粘贴到onResume()中,但似乎效率低下,这不是 Android studio 设计的工作方式。我可以以某种方式在另一个位置初始化值吗?
我有一个全局 Bunz class,如下所示:
public class Bunz {
private int bunz;
private int money;
private int increment;
//singleton code
private static Bunz instance;
private Bunz(){
}
public static Bunz getInstance(){
if (instance == null){
instance = new Bunz();
}
return instance;
}
public int getBunz() {
return bunz;
}
public void setBunz(int num){
bunz = num;
}
public int getMoney(){
return money;
}
public void setMoney(int num){
money = num;
}
public int getIncrement(){
return increment;
}
public void setIncrement(int num){
increment = num;
}
}
也许我可以在这里初始化这些值?
谢谢!
您还可以做一件事:
public static Bunz getInstance(){
if (instance == null){
instance = new Bunz();
instance.setBunz(50);
instance.setMoney(0);
}
return instance;
}
在此处创建实例时,请尝试在此处设置您想要的值,而不是在应用程序的 onCreate 中。
您也可以在构造函数中进行更改。
虽然您的代码使用了静态,但我认为这是不必要的。静态不是你的普通 goto 解决方案,它们伴随着不符合 GC 条件的对象的高昂代价。
您可以通过 onActivityResult
方法从第二个 activity 获得结果。
First, start second activity using startAtivityForResult()
//This takes in a request code(Int), it can be whatever you set.
第一个activity
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent , 100);
第二个Activity
//Do you work in the second activity, generate new data
Intent returnIntent = new Intent();
returnIntent.putExtra("bunz", 100);
returnIntent.putExtra("money", 200);
returnIntent.putExtra("increment", 2);
setResult(Activity.RESULT_OK, returnIntent);
finish();
捕获第二个Activity结果
这段代码应该写在你的第一个 activity.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 100) { //Remember the code we set in startActivityForResult? This is where we identify our work
if(resultCode == Activity.RESULT_OK){ //Code to check if data is passed
Int bunz =data.getIntExtra("bunz")
bunz.setBunz(bunz)
.....
}
}
}