getIntExtra()和putExtra()?

Par*_*iya 2 android android-intent

我读了Hello Android书,我不知道下面的代码.我不知道该怎么做getIntExtra()和putExtra()int这段代码.

 private void startGame(int i) {
     Log.d(TAG, "clicked on " + i);
     Intent intent = new Intent(Sudoku.this, Game.class);
     intent.putExtra(Game.KEY_DIFFICULTY, i);
     startActivity(intent);
 }
Run Code Online (Sandbox Code Playgroud)

Game.java

public class Game extends Activity {
    private static final String TAG = "Sudoku" ;
    public static final String KEY_DIFFICULTY ="org.example.sudoku.difficulty" ;
    public static final int DIFFICULTY_EASY = 0;
    public static final int DIFFICULTY_MEDIUM = 1;
    public static final int DIFFICULTY_HARD = 2;
    private int puzzle[] = new int[9 * 9];
    private PuzzleView puzzleView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate" );
        int diff = getIntent().getIntExtra(KEY_DIFFICULTY,DIFFICULTY_EASY);
        puzzle = getPuzzle(diff);
        calculateUsedTiles();
        puzzleView = new PuzzleView(this);
        setContentView(puzzleView);
        puzzleView.requestFocus();
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是你在Game类中设置一个局部整数('diff').默认值为零(简单),然后立即将其传递给getPuzzle方法.... 用户输入值(真实值一切都很好)是如何找到它进入getPuzzle方法的?

Hei*_*nzi 11

这段代码:

 Intent intent = new Intent(Sudoku.this, Game.class); 
 intent.putExtra(Game.KEY_DIFFICULTY, i); 
 startActivity(intent); 
Run Code Online (Sandbox Code Playgroud)

创建一个intent,当执行时startActivity,做两件事:

  • 它启动一个新的类活动Game(由参数指定Game.class)和
  • 它将i(=用户输入)传递给活动,标记为字符串内容KEY_DIFFICULTY.

在活动中,这一行:

 int diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_EASY); 
Run Code Online (Sandbox Code Playgroud)

读取KEY_DIFFICULTY用于启动活动的intent中设置的值.因此,diff现在包含用户选择的值(或者DIFFICULTY_EASY,如果活动是通过设置的其他意图启动的话KEY_DIFFICULTY).