setEabled(true)とsetEnabled(false)

setEnabledでtrueだとbuttonを押せる。

private Button startButton;
    private Button stopButton;
    private Button resetButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startButton = (Button) findViewById(R.id.startButton);
        stopButton = (Button) findViewById(R.id.stopButton);
        resetButton = (Button) findViewById(R.id.resetButton);

        setButtonState(true,false,false);
    }

    public void setButtonState(boolean start, boolean stop, boolean reset){
        startButton.setEnabled(true);
        stopButton.setEnabled(false);
        resetButton.setEnabled(false);

    }

firstname, lastname, phone, emailをintentする

public void getScore(View view){


        // edittextを取得
        EditText fEditText = (EditText) findViewById(R.id.firstnEditText);
        EditText lEditText = (EditText) findViewById(R.id.lastnEditText);
        EditText pEditText = (EditText) findViewById(R.id.phoneEditText);
        EditText mEditText = (EditText) findViewById(R.id.mailEditText);
        // edittextの中身を取得
        String firstName = fEditText.getText().toString().trim();
        String lastName = lEditText.getText().toString().trim();
        String myPhone = pEditText.getText().toString().trim();
        String myMail = mEditText.getText().toString().trim();

        Pattern p = Pattern.compile("^[0-9\\-]+");
        Matcher m = p.matcher(myPhone);

        Pattern mp = Pattern.compile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$");
        Matcher mm = mp.matcher(myMail);

        // 中身を観て条件分岐
       if (firstName.equals("")){
             fEditText.setError("Please enter your first name!");
        } else if(lastName.equals("")){
           lEditText.setError("Please enter your last name!");
        } else if(myPhone.equals("") || m.find() == false){
           pEditText.setError("Please enter your phone number!");
        }else if(myMail.equals("") || mm.find() == false){
           mEditText.setError("Please enter your valid email");
        } else {
            Intent intent = new Intent(this, MyResult.class);
            intent.putExtra(EXTRA_MYFNAME, firstName);
           intent.putExtra(EXTRA_MYLNAME, lastName);
           intent.putExtra(EXTRA_MYPHONE, myPhone);
           intent.putExtra(EXTRA_MYMAIL, myMail);
            startActivity(intent);
        }
    }

入力すると

引き継がれる! EditTextは良さそうですね。

EditTextがnullもしくは[0-9\\-]を判定する

MainActivity.javaで電話番号の判定
Pattern p = Pattern.compile(“^[0-9\\-]+”); として、EditTextが数字・ハイフンか正規表現を行う
javaのORは||なので、myPhone.equals(“”) || m.find() == false とする

public void getScore(View view){


        // edittextを取得
        EditText fEditText = (EditText) findViewById(R.id.firstnEditText);
        EditText lEditText = (EditText) findViewById(R.id.lastnEditText);
        EditText pEditText = (EditText) findViewById(R.id.phoneEditText);
        EditText mEditText = (EditText) findViewById(R.id.mailEditText);
        // edittextの中身を取得
        String firstName = fEditText.getText().toString().trim();
        String lastName = lEditText.getText().toString().trim();
        String myPhone = pEditText.getText().toString().trim();
        String myMail = mEditText.getText().toString().trim();

        Pattern p = Pattern.compile("^[0-9\\-]+");
        Matcher m = p.matcher(myPhone);

        // 中身を観て条件分岐
       if (firstName.equals("")){
             fEditText.setError("Please enter your first name!");
        } else if(lastName.equals("")){
           lEditText.setError("Please enter your last name!");
        } else if(myPhone.equals("") || m.find() == false){
           pEditText.setError("Please enter your phone number!");
        }else if(myMail.equals("")){
           mEditText.setError("Please enter your first name!");
        } else {
            Intent intent = new Intent(this, MyResult.class);
            intent.putExtra(EXTRA_MYNAME, firstName);
            startActivity(intent);
        }
    }

おお、Androidの開発の仕方が少しづつ掴めてきた。まずjavaで関数の挙動を確認して、studioで実機確認。php+vagrantとほぼ同じ。

続けてメールアドレスの判定も行いたい

javaのif else

else if() で書きます。

public void getScore(View view){
        // edittextを取得
        EditText fEditText = (EditText) findViewById(R.id.firstnEditText);
        EditText lEditText = (EditText) findViewById(R.id.lastnEditText);
        EditText pEditText = (EditText) findViewById(R.id.phoneEditText);
        EditText mEditText = (EditText) findViewById(R.id.mailEditText);
        // edittextの中身を取得
        String firstName = fEditText.getText().toString().trim();
        String lastName = lEditText.getText().toString().trim();
        String myPhone = pEditText.getText().toString().trim();
        String myMail = mEditText.getText().toString().trim();

        // 中身を観て条件分岐
       if (firstName.equals("")){
             fEditText.setError("Please enter your first name!");
        } else if(lastName.equals("")){
           lEditText.setError("Please enter your last name!");
        } else if(myPhone.equals("")){
           pEditText.setError("Please enter your phone number!");
        }else if(myMail.equals("")){
           mEditText.setError("Please enter your first name!");
        } else {
            Intent intent = new Intent(this, MyResult.class);
            intent.putExtra(EXTRA_MYNAME, firstName);
            startActivity(intent);
        }
    }

androidだとbuildに時間がかかるので、javaのplaygroundで関数の挙動を確かめながらやった方が速いですね。
https://code.sololearn.com/cVRUy2BwauK8/#java

電話番号とメールはバリデーションをかけたい。phoneはtoString? 電話だからstringでいいのか?

javaのrandomGenerator

randomGeneratorのclassを使う
randomGenerator.nextInt(101)で0~100のランダムな数を生成する
int型をstring型にキャストする場合は、String.valueOfを使う

        Random randomGenerator = new Random();
        int score = randomGenerator.nextInt(101);
        TextView scoreLabel = (TextView) findViewById(R.id.scoreLabel);
        scoreLabel.setText(String.valueOf(score) + "点!");

OKのようです。phpで作っていく場合は、ほとんど挙動をつくってからstylingでしたが、androidの場合は、stylingにちかい記述(layoutのxml)をはじめっから書いてしまう、というのが進め方として違いますね。

遷移先でのintentの取得方法

intent.getStringExtra(MainActivity.Key) で値を取得する。いわゆるphpの$_POST(“hoge”)みたいなイメージ
textviewに入れ込むには、findViewById にsetText
Javascriptのdocument.ElementGetByIdにそっくりなので、覚えやすいですね。

Intent intent = getIntent();
        String myName = intent.getStringExtra(MainActivity.EXTRA_MYNAME);
        TextView nameLabel = (TextView) findViewById(R.id.nameLabel);
        nameLabel.setText(myName + "の点数は...");

値を引き継いでいます。

.putExtraでEditTextのvalueとkeyを渡す

intent.putExtra(key, myEditText.getText().toString().trim())
引数1は、packageと名前をつけることが推奨されているので、public finalで、定義する。

public final static String EXTRA_MYNAME = "com.capital.scoreapp.myname";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void getScore(View view){


        // edittextを取得
        EditText myEditText = (EditText) findViewById(R.id.myEditText);
        // edittextの中身を取得
        String myName = myEditText.getText().toString().trim();
        // 中身を観て条件分岐
       if (myName.equals("")){
//            // エラー処理
             myEditText.setError("Please enter your name!");
//            Toast.makeText(
//                    this,
//                    "please enter your name!",
//                    Toast.LENGTH_LONG
//            ).show();
//        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
//        alertDialogBuilder
//                .setTitle("Error!")
//                .setMessage("Please enter your name!")
//                .setPositiveButton("OK", null);
//        AlertDialog alertDialog = alertDialogBuilder.create();
//        alertDialog.show();
        } else {
            Intent intent = new Intent(this, MyResult.class);
            intent.putExtra(EXTRA_MYNAME, myName);
            startActivity(intent);
        }
    }

alertDialogを使ってみよう

AlertDialog.builderとして、setTitle,setMessage,setPoisitiveButtonを設定していきます。

if (myName.equals("")){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder
                .setTitle("Error!")
                .setMessage("Please enter your name!")
                .setPositiveButton("OK", null);
        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
        } else {

        }

かっけーーーー!!!!!!!!!

setError, toast, alertDialogだったら、断トツでalertDialogがいいな。

toastを表示する

toastの場合、Toast.makeTextとしてますね。

 if (myName.equals("")){
            // エラー処理
            // myEditText.setError("Please enter your name!");
            Toast.makeText(
                    this,
                    "please enter your name!",
                    Toast.LENGTH_LONG
            ).show();
        } else{

        }