JavaでTimerというと、一度でもやった方は理解してくださると思う。JavaのTimerは別スレッドで動くため、そこから本体側のUIにアクセスできない。だから以下のソースのようにやる。
なお、キモは以下のとおり。
なお、NetBeans + Android SDKなので、eclipseだと少し違うかもしれない。
起動して一秒後に「1匹のほむほむ」と表示されます。あとは2秒ごとに2匹、3匹と増えていきます。 意味?適当に決まっとる。キニスンナ XD
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, MainActivity" /> </LinearLayout>
import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private boolean sunset = false; // trueになったら日没(プログラム終了)。 private int count = 0; private final Context context = this; private final Handler handler = new Handler(); //private TextView web = (TextView) findViewById(R.id.textView1); // ←ここで直接セットするとAndroidで例外になるぞ! onCreateでやれ private TextView web; private final Runnable showMessageTask = new Runnable() { @Override public void run() { if(sunset == false){ web.setText(String.valueOf(++count) + "匹のほむほむ"); handler.removeCallbacks(showMessageTask); // 自分自身を再呼び出しする前にコールバックを消しておこう。 handler.postDelayed(showMessageTask, 2000); }else{ // fin. finish(); } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); web = (TextView) findViewById(R.id.textView1); handler.postDelayed(showMessageTask, 1000); } @Override public void onBackPressed() { new AlertDialog.Builder(MainActivity.this).setPositiveButton("終了", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int which) { try { count = -9999; sunset = true; } catch (Error e) { } MainActivity.this.finish(); } }).setNegativeButton("Cancel", null).setMessage("終了しますか??").show(); } }