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를 반환한다.
}
}
자세한 설명은 주석으로 설명해놨으니 확인해보면 될것 같다.
반응형
'코딩일기 > android studio' 카테고리의 다른 글
안드로이드 독학 18일차 : 상황에 따른 버튼 클릭 이벤트 처리 (0) | 2021.04.08 |
---|---|
안드로이드 독학 17일차 : DatePickerDialog & TimePickerDialog (2) | 2021.04.01 |
안드로이드 독학 16일차 : 팝업 메뉴(PopupMenu) (2) | 2021.03.31 |
안드로이드 독학 15일차 : 컨텍스트 액션 모드(Context ActionMode) (0) | 2021.03.30 |
안드로이드 독학 15일차 : 플로팅 컨텍스트 메뉴(Floating Context Menu) (0) | 2021.03.30 |