処理を遅延させる/Android(Java)




androidで処理を遅延させるときは
Handler()クラスのpostDelayedメソッドが便利
…ってかそれしか知らない (^^;)


コードは簡単で例えば1000ミリ秒(1秒)遅らす場合は、

new Handler().postDelayed(new Runnable(){
  @Override
  public void run(){
    //ここに処理を書く
  }
}, 1000);

これだけ

具体的には、
例えばメイン画面とサブ画面があって、メイン画面のボタンを押したら1秒待ってサブ画面に遷移し、サブ画面のボタンを押したら3秒待ってメイン画面に戻るようにするなら…


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    tools:ignore="HardcodedText" >

    <Button android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:onClick="change"
        android:text="ボタン"/>

    <TextView android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Main Activity"
        android:textSize="32sp"/>

</LinearLayout>

MainActivity.java

//package及びimport省略

public class MainActivity extends AppCompatActivity {

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

    public void change(View view) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run(){
              Intent intent = new Intent( MainActivity.this, Sub.class );
                startActivity( intent );
            }
        }, 1000);
    }
}

activity_sub.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Sub">

    <!-- ↓これでメインアクティビティのレイアウトを利用できる -->
    <include layout="@layout/activity_main"/>

</LinearLayout>

Sub.java

//package及びimport省略

public class Sub extends AppCompatActivity {

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

        TextView tv = findViewById(R.id.tv);
        tv.setText(R.string.sub);

        Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run(){
                        finish();
                    }
                }, 3000);
            }
        });
    }
}

こんな感じ。こんな実装しないと思うけど遅延処理自体は何かとね。
あとはrun()の{ }の中身を適宜変えればOK!

んではまた(^^)/


スポンサーリンク


コメントは受け付けていません。