getIntExtra()和putExtra()?

时间:2012-09-07 13:09:41

标签: android android-intent

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

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

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();
    }
    // ...
}

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

2 个答案:

答案 0 :(得分:10)

此代码:

 Intent intent = new Intent(Sudoku.this, Game.class); 
 intent.putExtra(Game.KEY_DIFFICULTY, i); 
 startActivity(intent); 

创建一个intent,当使用startActivity执行时,会执行两项操作:

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

在活动中,这一行:

 int diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_EASY); 

读取在用于启动活动的意图中为KEY_DIFFICULTY设置的值。因此,diff现在包含用户选择的值(或DIFFICULTY_EASY,如果活动是通过设置KEY_DIFFICULTY的其他意图启动的。 / p>

答案 1 :(得分:1)

Intents用于在android中以编程方式启动活动。意图可以携带您传递给新开始活动的数据。

startGame(int i)

以意图开始新的游戏活动。额外添加意图意味着,您将数据传递给intent。启动的活动(在你的情况下是Game.java)然后可以从意图中加入这个额外的。

这是一种在活动之间传递数据的机制。

第一个参数(KEY_DIFFICULTY)是识别额外信息的关键。因此,如果您使用关键字“mykeyexample”添加额外的意图,则必须在另一个活动中使用相同的密钥“mykeyexample”获取,以从意图中获得所需的额外内容。

希望这有帮助