
概要
- Android での少し実用的な Hello, world! アプリ
- Android Studio でスケルトン作れば Hello World! と出るけど、resouce 出してるだけで変化させれないので、ボタン押したら出す、APIコールの結果とか入れればそれが出る、ぐらいのもの
- テスト用にいつも使うのでコピペするよう
詳細
スケルトン作成
- Android Studio → File → New → New Project… → 適当にアプリ名とパッケージ名を入れて → Next
→ API レベルを適当に選んで Next
→ Empty Activity を選んで Next
→ Finish (MainAcivity は名前を変えておいた方が後々検索するときに楽)
- Android Studio → File → New → New Project… → 適当にアプリ名とパッケージ名を入れて → Next
→ API レベルを適当に選んで Next
public class MainActivity extends Activity とかの下に追加
最近は extends AppCompatActivity かprivate ArrayAdapter<String> mAA; private void log(final String str) { runOnUiThread(new Runnable() { @Override public void run() { if (mAA != null) { mAA.add(str); } } }); }
setContentView() をコメントアウトして、コードで View を生成(ボタンとリストビュー)
// setContentView(R.layout.activity_main); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); setContentView(ll); Button btn = new Button(this); btn.setText("test"); ll.addView(btn); mAA = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); ListView lv = new ListView(this); lv.setAdapter(mAA); ll.addView(lv); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { log("Hello, world!"); } });
結果
- ボタンとリストビューだけのアクティビティが作成され、ボタンを押すとリストビューに Hello, world! が追加される
- (あとでスクリーンショットを貼る)
簡単な応用
log(文字列) でリストビューに出力される
onClick() の中で Context を参照するときは <クラス名>.this を使う
Toast.makeText(MainActivity.this, "message", Toast.LENGTH_LONG).show();
onClick() の中は UI Thread なので、Toast など GUI を触っても大丈夫(時間かかるのはダメだが)
簡易的に別スレッドで実行したい場合
時間のかかる処理は UI Thread ではやってはいけない。固まる。5秒(?)以上固まるとANR発生する。
Thread に Runnabule な instance を渡して start() すれば別 Thread で実行してくれる。(new Thread(new Runnable() { @Override public void run() { // ここは UI Thread ではないので GUI 触れない final String str = foo(); // 時間のかかる処理 log(str); // 中で runOnUiThread() してるので問題なし // runOnUiThread() に GUI 触る Runnable なインスタンスを渡してあげれば UI Thread 上で実行してくれる runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "message", Toast.LENGTH_LONG).show(); } } }) ).start();
まとめ
- ちょっとしたテストに使える Hello World になった。か?
