2017-03-08 1 views
0

Dans mon application de devinette Android, j'ai réussi à l'obtenir où lorsqu'un utilisateur saisit son nom sur une activité, il s'affiche sur le jeu lui-même. Mon problème, cependant, se produit lorsque l'utilisateur clique sur «oui» pour avoir un autre coup. Le jeu fonctionne bien mais leur nom disparaît. Je sais que c'est parce que l'activité recommence mais qu'on ne lui dit pas de porter le nom entré car cela a été fait via la méthode onOptionsItemsSelected et cliquer sur yes via la méthode OnClickListener mais je ne comprends pas comment je devrais "fusionner" les deux , si c'est un tour de phrase approprié.Lors de la saisie d'un nom par l'utilisateur, comment l'obtenir pour rester sur l'activité lors du redémarrage?

Mes cours sont ci-dessous:

public class GameCentral extends AppCompatActivity { 

int backButtonCount = 0; 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game_central_layout); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.commonmenus, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
**public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.guessingGame) { 
     // displays name entered on the game itself 
     startActivity(new Intent(this, Task3Activity.class)); 
     switch (item.getItemId()) { 
      case R.id.guessingGame: 
       Intent intent = new Intent(GameCentral.this, Task3Activity.class); 
       EditText playerName = (EditText) findViewById(R.id.playerNameInput); 
       intent.putExtra("PlayerName", playerName.getText().toString()); 
       startActivity(intent); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     }** 
    } else if (id == R.id.placeOne) { 

     Toast.makeText(this, "Game Placeholder One option is Clicked", Toast.LENGTH_SHORT).show(); 
    } else if (id == R.id.placeTwo) { 

     Toast.makeText(this, "Game Placeholder Two option is Clicked", Toast.LENGTH_SHORT).show(); 
    } else if (id == R.id.placeThree) { 

     Toast.makeText(this, "Game Placeholder Three option is Clicked", Toast.LENGTH_SHORT).show(); 
    } 

    return super.onOptionsItemSelected(item); 
} 

public void onBackPressed() { 
    // when the back button is pressed on the mobile, two presses takes you back out of the app completely 
    if (backButtonCount >= 1) { 
     Intent backIntent = new Intent(Intent.ACTION_MAIN); 
     backIntent.addCategory(Intent.CATEGORY_HOME); 
     backIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(backIntent); 
    } else { 
     Toast.makeText(this, "Press the back button again to close the application", Toast.LENGTH_SHORT).show(); 
     backButtonCount++; 
    } 

} 
} 

Et ....

public class Task3Activity extends AppCompatActivity { 

public Button rtnBtn; 
// button to return to Game Central at any point when clicked 
public void init() { 
    rtnBtn = (Button)findViewById(R.id.returnBtn); 
    rtnBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent homeScreen = new Intent(Task3Activity.this, GameCentral.class); 

      startActivity(homeScreen); 

      Toast toast2 = Toast.makeText(getApplicationContext(), "Thank you for playing. Come back soon", Toast.LENGTH_SHORT); 
      toast2.setGravity(Gravity.CENTER_VERTICAL, 0, 350); 
      toast2.show(); 
     } 
    }); 
} 

String value; 

int attempts = 0; 
final int maxAttempts = 1; 
Random randGen = new Random(); 
int ranNum; 
private SoundPlayer sound; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.task3_layout); 
    init(); 

    final String playerName = getIntent().getStringExtra("PlayerName"); 

    if (playerName != null) { 
     TextView dataRcvd = (TextView) findViewById(R.id.playerNameEntered); 
     dataRcvd.setText(playerName); 
    } 

sound = new SoundPlayer(this); 

    final TextView textResponse = (TextView) findViewById(R.id.txtResponse); 
    final TextView guessText = (TextView) findViewById(R.id.txtAnswer); 
    final EditText userGuess = (EditText) findViewById(R.id.etNumber); 
    final Button pressMe = (Button) findViewById(R.id.btnGuess); 
    final Button rtnButton = (Button) findViewById(R.id.returnBtn); 

    int min = 1; 
    int max = 19; 
    randGen = new Random(); 
    // Generate number once 
    ranNum = randGen.nextInt(max - min + 1) + min; 

    // if the user enters '0' or a number higher than '19' this toast message is displayed 
    final Toast toast = makeText(getApplicationContext(), "Please guess between 0 and 20", Toast.LENGTH_LONG); 
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 350); 


    // When the button is clicked, it shows the text assigned to the txtResponse TextView box 
    pressMe.setOnClickListener(new View.OnClickListener() { 


            @Override 
            public void onClick(View v) { 
      boolean correct = false; 
      final AlertDialog.Builder alert = new AlertDialog.Builder(Task3Activity.this); 
      alert.setTitle("Unlucky"); 
      alert.setCancelable(false); 
      alert.setMessage("You have guessed incorrectly three times. " + 
        "The answer was " + ranNum + ". " + "Would you like to play again?") 
        //.setCancelable(true) 
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          //dialog.dismiss(); 
          Intent i = new Intent(Task3Activity.this, Task3Activity.class); 
          i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

          //TextView dataRcvd = (TextView) findViewById(R.id.playerNameEntered); 
          //dataRcvd.setText(playerName); 
          startActivity(i); 
         } 
        }); 

      alert 
        .setNegativeButton("No", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int i) { 

          dialog.dismiss(); 
          Intent toy = new Intent(Task3Activity.this, GameCentral.class); 

          Toast toast2 = Toast.makeText(getApplicationContext(), "Thank you for playing. Come back soon", Toast.LENGTH_SHORT); 
          toast2.setGravity(Gravity.CENTER_VERTICAL, 0, 350); 
          toast2.show(); 
          startActivity(toy); 

         } 

         ; 
        }); 


      final AlertDialog.Builder alert2 = new AlertDialog.Builder(Task3Activity.this); 
      alert2.setTitle("You Did It!"); 
      alert2.setCancelable(false); 
      alert2.setMessage("The answer was " + ranNum + ". " + "Would you like to play again?") 
        // resets the game 
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          //dialog.dismiss(); 
          Intent i = new Intent(Task3Activity.this, Task3Activity.class); 
          i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
          startActivity(i); 


         } 
        }); 

      alert2 
        .setNegativeButton("No", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int i) { 
          // takes the user back to the Game Central app 
          dialog.dismiss(); 
          Intent toy = new Intent(Task3Activity.this, GameCentral.class); 

          startActivity(toy); 
         } 

         ; 
        }); 



      int userNumber = Integer.parseInt(userGuess.getText().toString()); 

      if ((userNumber < 1) || (userNumber > 19)) { 
       toast.show(); 
      } else if (userNumber < ranNum) { 
       guessText.setText("Your answer is too low. Guess again!"); 
       guessText.setBackgroundColor(Color.YELLOW); 
       //sound.playBuzzerSound(); 
      } else if (userNumber > ranNum) { 
       guessText.setText("Your answer is too high. Guess again!"); 
       guessText.setBackgroundColor(Color.RED); 
       //sound.playBuzzerSound(); 
      } else if (userNumber == ranNum) { 
       ranNum = randGen.nextInt(20); 
       //guessText.setText("You did it!"); 
       //guessText.setBackgroundColor(Color.WHITE); 
       correct = true; 
       alert2.show(); 
       sound.playApplauseSound(); 
      } 

      if (attempts++ > maxAttempts && !correct) { 
       alert.show(); 
       sound.playBooSound(); 
      } else if (correct) { 
      } else { 
       String randText = ""; 
       randText = Integer.toString(ranNum); 
       textResponse.setText(""); 

       userGuess.setText(""); 


      } 

     } 
    } 
    ); 


} 
} 

Comme toujours, des conseils, aide, ou la direction grandement appréciée.

Merci

Répondre

2

Pouvez-vous essayer d'utiliser un SharedPreferences peut-être?

SharedPreferences sharedPreferences = getSharedPreferences("NameList", MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPreferences.edit(); 

editor.putString("Name1", playerName); 

editor.apply(); 

Puis vient le chercher le faire:

SharedPreferences sharedPreferences = getSharedPreferences("NameList", MODE_PRIVATE); 
String playerName = sharedPreferences.getString("Name1", "Default name"); 
+0

Merci pour cela. Juste pour clarifier, dois-je mettre la première partie dans la classe GameCentral et la partie «aller chercher» dans l'autre classe? Ou vice versa? Ou les deux dans une classe? Encore à peu près un novice à cela. Merci –

+0

Mettez la première partie quand un joueur a d'abord entré son nom dans l'appareil, puis plus tard lorsque vous avez besoin du nom ailleurs, vous pouvez utiliser la deuxième partie pour récupérer ce que vous avez stocké dans la première partie. Vous pouvez à peu près mettre la deuxième partie où vous voulez, vraiment. –

+0

Merci. J'ai essayé. Premièrement, une seconde partie, elle ne me permettra plus d'utiliser 'sharedPreferences'. Il ajoute juste un 1 à la fin pour des raisons évidentes. Donc, en laissant cette ligne et en ayant juste la deuxième partie comme 'playerName = sharedPreferences.getString ("Name1", "Default name");' juste des résultats dans l'écran en remplaçant le nom que j'ai entré au début avec 'Default name' quand je choisis de commencer une nouvelle partie –