Keypad.java
上传用户:xmjingguan
上传日期:2009-07-06
资源大小:2054k
文件大小:3k
- /***
- * Excerpted from "Hello, Android!",
- * published by The Pragmatic Bookshelf.
- * Copyrights apply to this code. It may not be used to create training material,
- * courses, books, articles, and the like. Contact us if you are in doubt.
- * We make no guarantees that this code is fit for any purpose.
- * Visit http://www.pragmaticprogrammer.com/titles/eband for more book information.
- ***/
- package org.example.sudoku;
- import android.app.Dialog;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.view.View;
- public class Keypad extends Dialog {
- protected static final String TAG = "Sudoku";
- private final View keys[] = new View[9];
- private View keypad;
- private final int useds[];
- private final PuzzleView puzzleView;
- public Keypad(Context context, int useds[], PuzzleView puzzleView) {
- super(context);
- this.useds = useds;
- this.puzzleView = puzzleView;
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setTitle(R.string.keypad_title);
- setContentView(R.layout.keypad);
- findViews();
- for (int element : useds) {
- if (element != 0)
- keys[element - 1].setVisibility(View.INVISIBLE);
- }
- setListeners();
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- int tile = 0;
- switch (keyCode) {
- case KeyEvent.KEYCODE_0:
- case KeyEvent.KEYCODE_SPACE: tile = 0; break;
- case KeyEvent.KEYCODE_1: tile = 1; break;
- case KeyEvent.KEYCODE_2: tile = 2; break;
- case KeyEvent.KEYCODE_3: tile = 3; break;
- case KeyEvent.KEYCODE_4: tile = 4; break;
- case KeyEvent.KEYCODE_5: tile = 5; break;
- case KeyEvent.KEYCODE_6: tile = 6; break;
- case KeyEvent.KEYCODE_7: tile = 7; break;
- case KeyEvent.KEYCODE_8: tile = 8; break;
- case KeyEvent.KEYCODE_9: tile = 9; break;
- default:
- return super.onKeyDown(keyCode, event);
- }
- if (isValid(tile)) {
- returnResult(tile);
- }
- return true;
- }
- /** Return the chosen tile to the caller */
- private void returnResult(int tile) {
- puzzleView.setSelectedTile(tile);
- dismiss();
- }
- private boolean isValid(int tile) {
- for (int t : useds) {
- if (tile == t)
- return false;
- }
- return true;
- }
- private void findViews() {
- keypad = findViewById(R.id.keypad);
- keys[0] = findViewById(R.id.keypad_1);
- keys[1] = findViewById(R.id.keypad_2);
- keys[2] = findViewById(R.id.keypad_3);
- keys[3] = findViewById(R.id.keypad_4);
- keys[4] = findViewById(R.id.keypad_5);
- keys[5] = findViewById(R.id.keypad_6);
- keys[6] = findViewById(R.id.keypad_7);
- keys[7] = findViewById(R.id.keypad_8);
- keys[8] = findViewById(R.id.keypad_9);
- }
- private void setListeners() {
- for (int i = 0; i < keys.length; i++) {
- final int t = i + 1;
- keys[i].setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- returnResult(t);
- }});
- }
- keypad.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- returnResult(0);
- }});
- }
- }