読者です 読者をやめる 読者になる 読者になる

刺身タンポポ職人なう

文系女子大生がエンジニアとして就職してその後

Android で CheckBox を作成してみる

CheckBoxを用意し、結果をログに表示させる。

Android の CheckBox を作成して、ON/OFF をログに表示させるところまで実装をしてみる。

f:id:tooooomin:20170320222630p:plain

レイアウトの作成

<CheckBox android:id="@+id/checkbox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="メールマガジン受信" />

クリックイベントの取得

setOnClickListener でイベント取得する。CompoundButton のほうがきれいに書けるのかな?

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

    findViewById(R.id.checkbox).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckBox checkBox = (CheckBox) v;
            if (checkBox.isChecked()) {
                Log.d("MainActivity", "メールマガジン受信ON");
            } else {
                Log.d("MainActivity", "メールマガジン受信OFF");
            }
        }
    });
}

ログの表示

03-20 09:05:20.637 1651-1651/com.example.hoge.checkbox D/MainActivity: メールマガジン受信ON
03-20 09:05:22.674 1651-1651/com.example.hoge.checkbox D/MainActivity: メールマガジン受信OFF
03-20 09:05:24.047 1651-1651/com.example.hoge.checkbox D/MainActivity: メールマガジン受信ON
03-20 09:05:27.760 1651-1651/com.example.hoge.checkbox D/MainActivity: メールマガジン受信OFF

Androidに各Activityを追加してライフサイクルの動きを確認する

Activityを追加して画面遷移をさせる

f:id:tooooomin:20170312215538p:plain

こんな感じにした。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("MainActivity", "onCreate");
        setContentView(R.layout.activity_main);
        findViewById(R.id.nextButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                transitionSecondActivity(v);
            }
        });
    }
    private void transitionSecondActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        this.startActivity(intent);
    }
}
public class SecondActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("SecondActivity", "onCreate");
        setContentView(R.layout.activity_second);
        findViewById(R.id.backButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                transitionMainActivity(v);
                finish();
            }
        });
    }
    private void transitionMainActivity(View view) {
        Intent intent = new Intent(this, MainActivity.class);
        this.startActivity(intent);
    }
}

ライフサイクルを確認する

ライフサイクルメソッドを追加し、ライフサイクルに合わせてログを表示させて動作確認する。

03-12 21:42:30.882 22899-22899/com.example.name.hello D/MainActivity: onStart
03-12 21:42:30.888 22899-22899/com.example.name.hello D/MainActivity: onResume
--- SecondActivity へ移動 ----
03-12 21:42:34.882 22899-22899/com.example.name.hello D/MainActivity: onPause
03-12 21:42:34.892 22899-22899/com.example.name.hello D/SecondActivity: onCreate
03-12 21:42:34.899 22899-22899/com.example.name.hello D/SecondActivity: onStart
03-12 21:42:34.900 22899-22899/com.example.name.hello D/SecondActivity: onResume
03-12 21:42:35.123 22899-22899/com.example.name.hello D/MainActivity: onStop
---- MainActivity に戻る ---
03-12 21:42:37.619 22899-22899/com.example.name.hello D/SecondActivity: onPause
03-12 21:42:37.628 22899-22899/com.example.name.hello D/MainActivity: onCreate
03-12 21:42:37.639 22899-22899/com.example.name.hello D/MainActivity: onStart
03-12 21:42:37.639 22899-22899/com.example.name.hello D/MainActivity: onResume
03-12 21:42:37.870 22899-22899/com.example.name.hello D/SecondActivity: onStop
03-12 21:42:37.870 22899-22899/com.example.name.hello D/SecondActivity: onDestroy
03-12 21:43:37.505 22899-22899/com.example.name.hello D/MainActivity: onPause
03-12 21:43:37.540 22899-22899/com.example.name.hello D/MainActivity: onStop

(いまさらだけど)mixi Android Training をはじめたよ

mixi AndroidTraining

mixigithubに公開しているAndroid学習用のページ。数年前から存在走っていたけれど、全然手を付けていなかった。 Javaはわかるけど、ネイティブを触る機会は少なく、Android Java は初心者。初心者がどこまでできるようになるか、健忘録としてめもっておくようにする。全部コンプリートしたら「Android初心者 学習方法!!」みたいなブログ書くんだ…slackのbotの記事が定期的にアクセスがあってすごいよgoogleさん、、うまい言葉でインデックスされると流入ってあるんだねgoogleさん…それ以外に大した記事書いてなくてごめんなさい/(^o;)\ mixi-inc.github.io

突然の挫折

基礎編の「アプリのレイアウト作成」まではキャピキャピしながら進められた。が、「ActivityとFlagment」で「???」となってしまったwwwwはやいよwwwもうまとめブログも書けないよ/(^o;)\

実習

Activity

  1. 新しい Activity と、それに対応するレイアウトを作成してください。 (使用するプロジェクト: AndroidStudio/practice/fundamentals/2nd/ActivityPractice/practice1/app/build.gradle)
  2. 1で作った Activity を、アプリ起動時に表示するよう変更してください。 (変更先のプロジェクト: AndroidStudio/practice/fundamentals/2nd/ActivityPractice/practice2/app/build.gradle)

Fragment

  1. 新しい Fragment と、それに対応するレイアウトを作成してください。 (使用するプロジェクト: AndroidStudio/practice/fundamentals/2nd/FragmentPractice/practice1/app/build.gradle)
  2. 1で作った Fragment を、既存の Activity に組み込んでください。 (変更先のプロジェクト: AndroidStudio/practice/fundamentals/2nd/FragmentPractice/practice2/app/build.gradle)

(^ν^)ん?

  1. 新しい Activity と、それに対応するレイアウトを作成してください。

(^ν^)ん?

低能な私には何をしていいのかわからない。早くも挫折しそう。

脱線

わからないから、いったんActivityとFragmentは一旦おいておくことにした。まずはイベントハンドラーからやる。 EditText で入力したテキストを TextView に表示させるかんたんなアプリケーション。

f:id:tooooomin:20170307225737j:plain

レイアウトの作成

アプリのレイアウト作成までは読んだからできたありがとう。

  • /layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.suzukitomoko.hello.MainActivity">

    <LinearLayout
        android:id="@+id/linearText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_centerHorizontal="true">
        <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hi! " />
        <TextView
            android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />
    </LinearLayout>

    <EditText
        android:id="@+id/inputText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="input your text here"
        android:layout_below="@+id/linearText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Button!!"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/inputText"/>
</RelativeLayout>

クリックイベントを取得する

参考にさせていただきました。 qiita.com

もうちときれいに書けそうだけどいったんこれでいいや

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // ボタンをクリックしたときの挙動
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                displayInputText(v);
            }
        });
    }
    private void displayInputText(View view) {
        TextView text = (TextView) findViewById(R.id.text2);
        EditText editText = (EditText) findViewById(R.id.inputText);
        text.setText(editText.getText().toString());
    }
}

とりあえず動いたよわー\(^o^)/