4

我读了 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);
 }

游戏.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 方法的方式?

4

2 回答 2

14

这段代码:

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

创建一个意图,当使用 执行时startActivity,会做两件事:

  • 它开始一个新的类活动Game(由参数指定Game.class)和
  • 它将(= 用户输入)传递i到活动中,并用KEY_DIFFICULTY.

在活动中,这一行:

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

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

于 2012-09-07T13:14:49.533 回答
1

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

startGame(int i)

有意图地开始新的游戏活动。为意图添加额外内容意味着,您正在将数据传递给意图。启动的活动(在您的情况下为 Game.java)然后可以从意图中访问这个额外的内容。

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

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

希望这可以帮助

于 2012-09-07T13:18:10.040 回答