티스토리 뷰

Runnable 객체를 이용하여 메인 스레드를 제어할 때, post() 메서드가 아닌 postDelayed() 를 사용하여 딜레이를 설정할 수 있다. 

 

그렇게 어려운 내용은 아니니, 바로 예제로 넘어가자.


◎MainActivity.java

package com.example.sampledelayed;

import android.content.DialogInterface;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    Handler handler = new Handler(Looper.getMainLooper());

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

        textView = findViewById(R.id.textView);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                request();
            }
        });
    }

    private void request() {
        String title = "원격 요청";
        String message = "데이터를 요청하시겠습니까?";
        String titleButtonYes = "예";
        String titleButtonNo = "아니오";

        AlertDialog dialog = makeRequestDialog(title, message, titleButtonYes, titleButtonNo);

        dialog.show();

        textView.setText("대화상자 표시중...");
    }

    private AlertDialog makeRequestDialog(CharSequence title, CharSequence message, CharSequence titleButtonYes, CharSequence titleButtonNo) {
        AlertDialog.Builder requestDialog = new AlertDialog.Builder(this);
        requestDialog.setTitle(title);
        requestDialog.setMessage(message);
        requestDialog.setPositiveButton(titleButtonYes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                textView.setText("5초 후에 결과 표시됨.");
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText("요청 완료됨.");
                    }
                }, 5000);
            }
        });

        requestDialog.setNeutralButton(titleButtonNo, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {}
        });

        return requestDialog.create();
    }
}

버튼을 클릭하면 AlertDialog를 하나 생성한 뒤, yes 가 눌린다면 5초 뒤에 TextView의 값을 변경하는 간단한 코드이다.

 

 

반응형

'Mobile > Android' 카테고리의 다른 글

[Android] AsyncTask  (0) 2022.04.07
[Android] Thread로 메시지 전송  (0) 2022.04.07
[Android] Runnable  (0) 2022.04.06
[Android] Thread & Handler  (0) 2022.04.05
[Android] 선택 위젯 4: Spinner  (0) 2022.04.03
Comments