我们可以从另一个函数调用 OnCreate() 方法吗
Can we Call OnCreate() method from another function
我正在做一个简单的"Guess the number app"。应用程序在启动时会在 onCreate() 方法中生成一个随机数。在按钮点击方法上,我写了一段代码,这样用户将输入一个数字,如果数字正确,程序应该再次生成一个随机数。
但是,当我尝试从按钮的 onClick 方法再次调用 onCreate() 方法时,系统崩溃了。你能帮我看看如何从函数中调用这个 onCreate 方法吗?我在下面发布我的代码。
package com.amit.higherolower;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int randomNumber;
public void guessGame(View view){
String message = "";
EditText userNumber = (EditText) findViewById(R.id.numberEditBox);
String userNumberText = userNumber.getText().toString();
int userNumberInt = Integer.parseInt(userNumberText);
System.out.println(randomNumber);
if(userNumberInt < randomNumber){
message = "You've Guessed Lower";
((EditText) findViewById(R.id.numberEditBox)).setText("");
}
else if (userNumberInt > randomNumber){
message = "You've Guessed Higher";
((EditText) findViewById(R.id.numberEditBox)).setText("");
}
else{
message = "You're Right Dude, Now let's guess the new number again.";
onCreate(new Bundle());
}
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Random randomGenerator = new Random();
randomNumber = randomGenerator.nextInt(9);
}
}
思路对,重构出 onClose
。具体来说,正如 Umarov 所说,将你的两行非样板代码带到另一个函数中并调用它。
我也试过类似的东西:
public static void triggerRebirth(Context context, Intent nextIntent) {
Intent intent = new Intent(context, YourClass.class);
intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(KEY_RESTART_INTENT, nextIntent);
context.startActivity(intent);
if (context instanceof Activity) {
((Activity) context).finish();
}
Runtime.getRuntime().exit(0);
}
我正在做一个简单的"Guess the number app"。应用程序在启动时会在 onCreate() 方法中生成一个随机数。在按钮点击方法上,我写了一段代码,这样用户将输入一个数字,如果数字正确,程序应该再次生成一个随机数。
但是,当我尝试从按钮的 onClick 方法再次调用 onCreate() 方法时,系统崩溃了。你能帮我看看如何从函数中调用这个 onCreate 方法吗?我在下面发布我的代码。
package com.amit.higherolower;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int randomNumber;
public void guessGame(View view){
String message = "";
EditText userNumber = (EditText) findViewById(R.id.numberEditBox);
String userNumberText = userNumber.getText().toString();
int userNumberInt = Integer.parseInt(userNumberText);
System.out.println(randomNumber);
if(userNumberInt < randomNumber){
message = "You've Guessed Lower";
((EditText) findViewById(R.id.numberEditBox)).setText("");
}
else if (userNumberInt > randomNumber){
message = "You've Guessed Higher";
((EditText) findViewById(R.id.numberEditBox)).setText("");
}
else{
message = "You're Right Dude, Now let's guess the new number again.";
onCreate(new Bundle());
}
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Random randomGenerator = new Random();
randomNumber = randomGenerator.nextInt(9);
}
}
思路对,重构出 onClose
。具体来说,正如 Umarov 所说,将你的两行非样板代码带到另一个函数中并调用它。
我也试过类似的东西:
public static void triggerRebirth(Context context, Intent nextIntent) {
Intent intent = new Intent(context, YourClass.class);
intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(KEY_RESTART_INTENT, nextIntent);
context.startActivity(intent);
if (context instanceof Activity) {
((Activity) context).finish();
}
Runtime.getRuntime().exit(0);
}