Можем ли мы вызвать метод OnCreate() из другой функции

Я делаю простое приложение «Угадай число». Приложение генерирует случайное число при запуске в методе onCreate(). И в методе нажатия кнопки я написал код, чтобы пользователь ввел число, и если число правильное, программа должна снова сгенерировать случайное число.

Но когда я пытаюсь снова вызвать метод onCreate() из метода onClick моей кнопки, я получаю сбой системы. Можете ли вы помочь мне, как вызвать этот метод 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);
    }
}

person Amit Mhaske    schedule 30.12.2016    source источник
comment
просто создайте другой метод и поместите в него свои Random randomGenerator = new Random(); и randomNumber = randomGenerator.nextInt(9);. И вызовите этот метод.   -  person SpiralDev    schedule 30.12.2016
comment
@Umarov публикует это как ответ, я также думаю, что это лучшее решение   -  person koceeng    schedule 30.12.2016


Ответы (1)


https://stackoverflow.com/a/7150118/5353361 имеет правильную идею, провести рефакторинг из onClose. В частности, как говорит Умаров, перенесите две нестандартные строки в другую функцию и вместо этого вызовите ее.

Также я пробовал что-то вроде:

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);
}

из (https://github.com/JakeWharton/ProcessPhoenix) и https://stackoverflow.com/a/22345538/5353361

person John    schedule 30.12.2016