アプリ開発初心者です。
現在私は、様々なサイトを参考にしながら計算問題アプリを
作成しているのですが、上手くいきません。
以下のコードだと、ダイアログで表示されるOK,Cancelをタップすると次から値を入力することができない仕様になってしまっています。
OK,Cancelをタップして呼び出すメソッドに
onCreate(Bundle savedInstanceState)を
指定すればできるかと思いましたが、ダメでした。
何か解決策や、もしくはヒントを教えてください。
回答よろしくお願いします。
public class Keisan extends Activity implements View.OnClickListener { /** * Buttonの配列 */ Button mButton[]; /** * Idの配列 */ int mId[] = {R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.clearbtn}; /** * キー */ private final int KEY_EQUAL = 12; private final int KEY_CLEAR = 14; /** * TextView */ private TextView mTextView; private TextView mAnswer; private TextView qa1; private TextView qa2; private int n; private int m; /** * 答えのリスト */ private String[] answers = new String[4]; /** * 前の処理 */ private int beforeStatus = 0; /** * 計算中の値 */ private ArrayList<String> calcArray; /** * 計算する時の配列 */ private ArrayList<String> signArray; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.prac); Question(); // 1. AlertDialog.Builder クラスのインスタンスを生成 AlertDialog.Builder builder = new AlertDialog.Builder(this);//// // 表示用TextView mTextView=(TextView) findViewById(R.id.text1); mAnswer=(TextView) findViewById(R.id.text2); // Button mButton=new Button[mId.length]; // Buttonの取り込みとイベントのはりつけ for( int i = 0; i<mId.length;i++) { // buttonを取り込む mButton[i] = (Button) findViewById(mId[i]); // buttonのイベント処理 mButton[i].setOnClickListener(this); } calcArray=new ArrayList<String>(); signArray=new ArrayList<String>(); } public void Question(){ qa1 = null; qa2 = null; Random r = new Random(); n = r.nextInt(9) + 1; Random t = new Random(); m = r.nextInt(9) + 1; qa1 = (TextView) findViewById(R.id.text3); qa2 = (TextView) findViewById(R.id.text4); qa1.setText(String.valueOf(n)); qa2.setText(String.valueOf(m)); // 表示用TextView mTextView=(TextView) findViewById(R.id.text1); mAnswer=(TextView) findViewById(R.id.text2); // Button mButton=new Button[mId.length]; // Buttonの取り込みとイベントのはりつけ for( int i = 0; i<mId.length;i++) { // buttonを取り込む mButton[i] = (Button) findViewById(mId[i]); // buttonのイベント処理 mButton[i].setOnClickListener(this); } calcArray=new ArrayList<String>(); signArray=new ArrayList<String>(); } @Override public void onClick(View view) { // 押されたボタンがどのボタンかを判定 for (int i = 0; i < mId.length; i++) { if (view.equals(mButton[i])) { String nowValue = mTextView.getText().toString(); // CLEAR if (i == KEY_CLEAR) { mTextView.setText(""); calcArray.clear(); signArray.clear(); beforeStatus = KEY_CLEAR; } else if (i < 10) { nowValue = checkDisplay(nowValue); // 0しか入力されていない場合は0が2個以上並ばないようにする if (nowValue.equals("0") && i == 0) { return; } else if (nowValue.equals("0") && i != 0) { nowValue = ""; } nowValue = nowValue + i; mTextView.setText(nowValue); beforeStatus = i; } break; } } } private String checkDisplay(String now) { if (beforeStatus == KEY_EQUAL) { mTextView.setText(""); return "0"; } return now; } private double calc() { if (calcArray.size() == 0) { return 0.0; } if (calcArray.size() == 1) { return Double.parseDouble(calcArray.get(0)); } double passive = Double.parseDouble(calcArray.get(0)); double active; int j = 0; for (int i = 1; i < calcArray.size(); i++) { active = Double.parseDouble(calcArray.get(i)); if (signArray.get(j).equals("+")) { passive += active; } else { passive -= active; } j++; } return passive; } private void showAlert(double ans) { // 表示用TextView int total = 0; total += n; total += m; String title = getString(R.string.title); //インスタンス作成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(title); builder.setMessage(String.format(getString(R.string.msg), n, m, total)); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Question(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Question(); } }); builder.create().show(); } }
参考にしたコード
https://github.com/gcluelabs/DentakuQuiz001/blob/master/src/com/example/dentaku/Dentaku.java
回答3件
あなたの回答
tips
プレビュー