我读了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方法的?
答案 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”获取,以从意图中获得所需的额外内容。
希望这有帮助