Kasasagi’s memorandum

JavaとかProcessingとか。最近はAtcoderとか。

activity・匿名クラスへの値の受け渡し

こんばんは、最近キズナアイの動画に英語の字幕を付けて、TOEIC対策をしているかささぎです。おそらく効果は微塵もない。

ブログ立ち上げた最初の記事で、Androidについていろいろ書くとか言っときながら、一回も書いてなかったので、よく使う上に忘れやすい値の受け渡しについて書きます。
今回から、はてな記法ソースコードを書く方法を覚えたので、軽いコードはこちらでやっていきます。長いコードはこれまで通りGistにして貼る予定です。

1.activity間でのやり取り

activity間のやり取りは、主に画面遷移の際に行います。非staticなデータのやり取りなどで活躍します。たぶん。

1-1. activityへの受け渡し
int num;
Intent intent = new Intent(A.this , B.class);
intent.putExtra("number",num);
startActivity(intent);

putExtra()関数で受け渡します。一つ目の引数には受け渡し時のキーをString型で、二つ目の引数には受け渡すデータを入れます。データはどの型でも利用できます。また、putExtra関数では複数の値を渡すことができます。

1-2. 受け取り
 Intent intent = getIntent();
 int num = intent.getIntExtra("number", 0);

受け取りは上のようにします。int型ならgetIntExtra、boolean型ならgetBooleanExtraなど、型ごとに用意されています。1つ目の引数にはputExtra関数で設定したキー、2つ目の引数にはキーが見つからなかった時に格納するデータを入れます。

2.匿名クラスでのやり取り

匿名クラスとは、簡単に言えば一度限りの使い捨てのクラスです。()のなかに{}が入ってるアレです。匿名クラス外の変数はスコープの外のため、利用することができません。そのため受け渡してやる必要があります。
Androidでは主にウィジェットやレイアウトなどのクリック時処理の際に利用します。今回はButtonで解説します。

2-1 匿名クラスへの受け渡し
int num;
int key;
Button button = (Button)findViewById(R.id.button1);
button.setClickable(true);
button.setTag(String.valueOf(num));
//button.setTag(key , String.valueOf(num));

参考→http://java.it-manual.com/cast/Object-int.html
受け渡すデータはobject型なので、プリミティブ型であるint型をそのまま入れることはできません。String型に格納し、受け取る際にキャストしてint型で受け取る感じとなります。object型のキャスト全く覚えられないから嫌い。
setClickable関数はクリックに反応させるために必要です。受け渡しとは関係ありまおんせん。
setTag関数でタグをセットします。データのみと、キー(こちらはint型)も添付する2つが用意されています。2つ以上の値を送信するためにはキーが必要です。

2-2 匿名クラス・受け取り

匿名クラスの文法も付けときます。ボタンクリック時の処理です。

button.setOnClickListener(new View.OnClickListener(){
     @Override
     public void onClick(View v) {
           int tag = Integer.parseInt(v.getTag().toString());
             //int key;
             //tag = Integer.parseInt(v.getTag(key).toString());
     }
});

受け取り時はシンプルです。キャスト面倒だけど。

3. 感想

授業での開発でAndroidアプリ開発をしているのですが、Activityの遷移が多く受け渡しはよく使います。使い慣れるようになりたいものです。あと、キャストをしっかり覚えられるようになりたい。Object型⇔プリミティブ型の変換とかレベル高すぎません?

それではさようなら。