忍者ブログ

からすまる日誌 java

android studio(9) 時間表示

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

android studio(9) 時間表示

プリント
4つめのパターンでやる
 
4.onClick プロパティで指定したメソッドを作る
 
package com.example.lesson4;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity{
    private TextView myText;
    private Button myButton1;
    private Button myButton2;
    private Button myButton3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myText = findViewById(R.id.myText);/*newする必要はなくひもづけだけする*/
        myButton1 = findViewById(R.id.button);
        myButton2 = findViewById(R.id.button2);
        myButton3 = findViewById(R.id.button3);
        /*
        myButton1.setOnClickListener(this);
        myButton2.setOnClickListener(this);
        */
    }
    public void myClick(View v) {
        myText.setText("aaaaaaa");
    }
    /*
    @Override
    public void onClick(View v) {
        if (v != null) {
            switch (v.getId()) {
                case R.id.button:
                    //処理
                    myText.setText("bye wolrd");
                    break;
                case R.id.button2:
                    //処理
                    myText.setText("hello wolrd");
                    break;
                default:
                    break;
            }
        }
    }
     */
}
 


時間処理
 
.javaを選んでる状態で
ファイル
→新規
→新規アクティビティ
 
 
 
 
>II. 時間処理
1)アクティビティの追加
ファイル → 新規 → アクティビティ → 空のアクティビティ
Activity 名:TimeActivity
レイアウト:activity_time(規定のまま)
※確認
・作成されたクラスファイル、レイアウトファイル
・マニフェスト内容
2)起動アクティビティを TimeActivity に変更
 
3)レイアウトの変更、コントロールの追加
① LinearLayout に変更
② コントロールの追加
種類 id 変数名
TextView nowText nowText
4)TimeActivity の作成
TextView に現在時刻を表示するようにします。
 
あかいところはalt+enterしてインポートする
候補のどれをインポートするかわかるには経験がいる
 
TimeActivity.java
package com.example.lesson4;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimeActivity extends AppCompatActivity implements View.OnClickListener {
    // 時刻表示のフォーマット定義
    private static SimpleDateFormat formatDateTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    private static SimpleDateFormat formatDate = new SimpleDateFormat("yyyy/MM/dd");
    private Handler myHandler;
    private Timer myTimer;
    private Date today;
    private TextView nowText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_time);
        myHandler = new Handler(getMainLooper());
        myTimer = new Timer();
        
        myTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                myHandler.post(new Runnable() {
                    public void run() {
                        Calendar calendar = Calendar.getInstance();
// 時刻表示
                        ((TextView) findViewById(R.id.nowText)).setText(formatDateTime.format(calendar.getTime()));
                    }
                });
            }
        }, 0, 1000);
        nowText = findViewById(R.id.nowText);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (myTimer != null) {
            myTimer.cancel();
            myTimer = null;
        }
    }
    @Override
    public void onClick(View v) {
        if (v != null) {
            switch (v.getId()) {
                default:
                    break;
            }
        }
    }
}
 
 
これはマルチスレッドのプログラム
 
timeactivity(たいむあくてぃびてぃ)と
mytimer(まいたいまー)の
2つが動いている
  

1000ミリ秒ごとにフォーマット整えて表示している
メインアクティビティは、ふつうメインアクティビティを閉じたときにおなくなりになるけど
このプログラムでは必要があってここで手動でおなくなりにしている
 
    protected void onDestroy() {
        super.onDestroy();
        if (myTimer != null) {
            myTimer.cancel();
            myTimer = null;
 
ルールとして
サブのスレッドから
メインのコントロールには直接触れないというルールがある
なのでpostという依頼をする
 
サブからメインのコントロール
 
メインスレッド:テキストボックスを表示
サブ:やりたい処理を投函しておく(post)
メインのタイミングのいいときに更新する
  
このあたりの部分のおはなしらしい
 
myTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                myHandler.post(new Runnable() {
                    public void run() {
                        Calendar calendar = Calendar.getInstance();
// 時刻表示
                        ((TextView) findViewById(R.id.nowText)).setText(formatDateTime.format(calendar.getTime()));
                    }
                });
            }
 

 

このpostがないと(ダイレクトにやると)起動してもすぐおちて、あんたのところからメインのところにはさわれませんよとエラーがでる
サブからポストして、メインさんの都合のいいタイミングで実行していただくというかたち
 

あと何日プログラムに修正しますよ
 

 

 

 

 

 
PR

コメント

ブログ内検索

P R