안드로이드에서 다이얼로그는 정말 많이 사용합니다.
이번에는 액티비티에서 다이얼로그를 호출하고, 다이얼로그의 데이터를 다시 액티비티로 넘겨주는 작업을 진행해보겠습니다.
소스코드가 길어지면 보기도, 이해하기도 힘들어서 최대한 간단하게 작성하였고, XML파일은.... 더 간단하게 구현했습니다.
XML파일은 필요하게 수정하시면 될듯하네요.ㅎㅎㅎ
전체소스는 맨 아래에!
Dialog 를 extends 해주고, View.OnclickListener를 implements해줍니다.
CustomDialog.java
public class CustomDialog extends Dialog implements View.OnClickListener {
public CustomDialog(@NonNull Context context) {
super(context);
}
@Override
public void onClick(View view) {
}
}
CustomDialog 클래스를 생성해줬다면 interface를 구현해줍니다.
interface 이름은 CustomDialogInterface로 지었고,
noBtnClicked, noBtnClicked를 생성
각각 ok버튼과 no버튼이 눌렸을 때 발생시킬겁니다.
CustomDialog.java
interface CustomDialogInterface{
void okBtnClicked(String btnName);
void noBtnClicked(String btnName);
}
액티비티에서 호출할 리스너를 초기화 해줍니다.
CustomDialog.java
public void setDialogListener(CustomDialogInterface customDialogInterface){
this.customDialogInterface = customDialogInterface;
}
ok버튼 클릭하면 인터페이스의 okBtnClicked 함수 호출
no버튼 클릭하면 인터페이스의 noBtnClicked 함수 호출
CustomDialog.java
public void onClick(View v) {
switch (v.getId()){
case R.id.dlg_ok_btn:
//mBtnName 변수에 "ok btn"이라는 string 데이터를 넣고, 메인 액티비티로 보냄
mBtnName = "ok btn";
customDialogInterface.okBtnClicked(mBtnName);
dismiss();
break;
case R.id.dlg_no_btn:
//mBtnName 변수에 "no btn"이라는 string 데이터를 넣고, 메인 액티비티로 보냄
mBtnName = "no btn";
customDialogInterface.noBtnClicked(mBtnName);
dismiss();
break;
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.main_ok_btn:
CustomDialog customDialog = new CustomDialog(this);
customDialog.setDialogListener(new CustomDialog.CustomDialogInterface() {
@Override
public void okBtnClicked(String btnName) {
//다이얼로그 okBtnClicked 클릭했을 때 콜백
Log.e("onPositiveClicked","name:" +btnName);
}
//다이얼로그 noBtnClicked 클릭했을 때 콜백
@Override
public void noBtnClicked(String btnName) {
Log.e("onNegativeClicked","name:" +btnName);
}
});
customDialog.show();
break;
}
}
이렇게 하시면 다이얼로그에서
ok버튼을 누르면 메인액티비티에서 mBtnName에 ok btn 데이터를
no버튼을 누르면 메인액티비티에서 mBtnName에 no btn 데이터를 받으실 수 있습니다.
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button mDlgCallBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDlgCallBtn = findViewById(R.id.dlg_call_btn);
mDlgCallBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.dlg_call_btn:
//다이얼로그 선언
CustomDialog customDialog = new CustomDialog(this);
customDialog.setDialogListener(new CustomDialog.CustomDialogInterface() {
@Override
public void okBtnClicked(String btnName) {
//다이얼로그 okBtnClicked 클릭했을 때 콜백
Log.e("onPositiveClicked","name:" +btnName);
}
//다이얼로그 noBtnClicked 클릭했을 때 콜백
@Override
public void noBtnClicked(String btnName) {
Log.e("onNegativeClicked","name:" +btnName);
}
});
//다이얼로그 호출
customDialog.show();
break;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<Button
android:id="@+id/dlg_call_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="다이얼로그 호출"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
CustomDialog.java
package com.example.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.NonNull;
public class CustomDialog extends Dialog implements View.OnClickListener {
private CustomDialogInterface customDialogInterface;
private Context context;
private Button mDlgOkBtn, mDlgNoBtn;
public String mBtnName;
//인터페이스 선언
interface CustomDialogInterface{
void okBtnClicked(String btnName);
void noBtnClicked(String btnName);
}
//리스너 초기화
public void setDialogListener(CustomDialogInterface customDialogInterface){
this.customDialogInterface = customDialogInterface;
}
public CustomDialog(@NonNull Context context) {
super(context);
this.context = context;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_custom);
mDlgOkBtn = findViewById(R.id.dlg_ok_btn);
mDlgNoBtn = findViewById(R.id.dlg_no_btn);
mDlgOkBtn.setOnClickListener(this);
mDlgNoBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.dlg_ok_btn:
//mBtnName 변수에 "ok btn"이라는 string 데이터를 넣고, 메인 액티비티로 보냄
mBtnName = "ok btn";
customDialogInterface.okBtnClicked(mBtnName);
dismiss();
break;
case R.id.dlg_no_btn:
//mBtnName 변수에 "no btn"이라는 string 데이터를 넣고, 메인 액티비티로 보냄
mBtnName = "no btn";
customDialogInterface.noBtnClicked(mBtnName);
dismiss();
break;
}
}
}
dialog_custom.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<Button
android:id="@+id/dlg_ok_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textColor="#ffffff"
android:text="ok"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<Button
android:id="@+id/dlg_no_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textColor="#ffffff"
android:text="no"
app:layout_constraintTop_toBottomOf="@+id/dlg_ok_btn"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
안드로이드 MPAndroidChart 사이즈 작아지는 현상 (0) | 2023.01.16 |
---|---|
[Android] Android Context란? (0) | 2022.01.23 |
Android RecyclerView 구현하기! (0) | 2022.01.09 |
android calendar event 데이터 표시 (문제 해결) (6) | 2020.05.12 |