본문 바로가기
코딩일기/android studio

안드로이드 독학 16일차 : Dialog(대화상자)

by 욱파이어니어 2021. 3. 31.
728x90
반응형

이번에 알아볼 것은 Dialog이다. 

이건 뭐냐면 우리가 어떤 특정 뷰를 눌렀을 때 뜨는 것이다. 

ex)

그럼 이제 해당 부분을 만드는 방법을 알아보자.

 

이건 xml로 설정해주는 부분은 버튼 하나 만든 거 말고 없다. 기본 Dialog 관련해서는 xml파일이 따로 없다.

 

일단 버튼 설정에 쓴 xml 부터 보자.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/payment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="결제하기"
        android:textSize="25dp"
        android:layout_gravity="center" />
</LinearLayout>

 

하지만 이걸 만드는 방법은 2가지이다.

 

1. Dialog 클래스를 만들어서 사용한다.

2. 바로 액티비티에서 만들어서 사용한다.

 

그래서 나는 두가지 방법으로 만들었으니 참고하면 될 것 같다.

 

MainActivity class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1 = (Button) findViewById(R.id.payment);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pay();
            }
        });
    }

    public void pay() {
        //1. 클래스로 객체 생성
        //그리고 나서 show()를 통해서 보여줌
//        ExampleDialog ed = new ExampleDialog();
//        ed.show(getSupportFragmentManager(),"이게뭘까");


        //2. Dialog 클래스를 따로 만들지 않고하나의 액티비티 클래스 안에서 Dialog를 만든는 방법
        //여기에도 매개변수로 context를 받음
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setMessage("결제 하시겠습니까?");
        //'예' 버튼을 눌렀을때
        alertDialog.setPositiveButton("예",
                new DialogInterface.OnClickListener() {
                    //다이얼로그 안에있는 버튼을 클릭했을때의 리스너를 무명객체로 생성
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(getApplicationContext(), "결제가 완료되었습니다.", Toast.LENGTH_SHORT).show();
                    }
                })
                //'아니오' 버튼을 눌렀을때
                .setNegativeButton("아니오", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(getApplicationContext(), "결제 실패", Toast.LENGTH_SHORT).show();
                        finish(); //이건 아예이 액티비티를 종료시키는 부분이다.
                    }
                });
        alertDialog.show(); //Dialog를 보여주는 부분이다.
    }
}

객체 생성해서 show 하는 부분에 보면 getSupportFragmentManager() 메소드를 인자로 받는대

해당 부분은 FragmentManager를 받기 위해서 쓰는 메소드이다.

해당 부분은 아직 내가 잘 모르지만 추후에 fragment와 관련하여서 글을 설명 할테니 그때 다시 쓰도록 하겠다.

 

 

ExampleDialog class

public class ExampleDialog extends AppCompatDialogFragment {
    //Dialog 클래스를 만들어서 Dialog를 재사용 가능하게 클래스를 만들어 사용하는 방법인대
    //이 방벙은 위처럼 AppCompatDialogFragment를 extends 해줘야 한다.
    @NonNull
    @Override
    //Dialog를 만드는 작업인 onCreateDialog 메소드를 오버라이딩 한다.
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

        //AlertDialog/Builder는 매개변수로 context를 받는데 이는 getActivity에서 context를 가져온다.
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("결제창") //Dialog의 제목 부분
                .setMessage("결제를 원하십니까??") //Dialog안에 들어갈 메시지
                .setPositiveButton("네", new DialogInterface.OnClickListener() {
                    //Dialog안의 버튼을 클릭했을때의 리스너를 무명 객체로 만들어주는 부분
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //getActivity()를 통해서 context를 받아오고 그 context의 getApplicationContext()를 실행시켜준다.
                        Toast.makeText(getActivity().getApplicationContext(),"결제가 완료되었습니다.",Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("아니오", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(getActivity().getApplicationContext(),"결제 실패",Toast.LENGTH_SHORT).show();
                    }
                });
        return builder.create(); //이걸로 Dialog를 만들어줘서 만든 Dialog를 반환한다.
    }
}

자세한 설명은 주석으로 설명해놨으니 확인해보면 될것 같다.

 

반응형