Android

Dialogs (AlertDialog, DialogFragment)

 

# Dialogs (android developers)
https://developer.android.com/guide/topics/ui/dialogs#java

 

# AlertDialog (멈춤보단 천천히라도)
https://webnautes.tistory.com/1094

 

  1. 예 아니오 다이얼로그
  2. 리스트 다이얼로그
  3. 입력 창 예제
  4. 다중 선택 다이얼로그
  5. 로그인 창 다이얼로그
  6. DialogFragment (Activity에서 호출하는 경우)
  7. DialogFragment (Fragment 에서 호출하는 경우)

 

 

 


 

예 아니오 다이얼로그

 

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("타이틀");
dialog.setMessage("콘텐트");
dialog.setPositiveButton("예",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(),"예를 선택했습니다.",Toast.LENGTH_LONG).show();
            }
        });
dialog.setNegativeButton("아니오",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(),"아니오를 선택했습니다.",Toast.LENGTH_LONG).show();
            }
        });
dialog.show();

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp" >

    <TextView
        android:id="@+id/textviewLogo"
        android:layout_width="221dp"
        android:layout_height="54dp"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        android:textSize="40sp"
        android:text="Login" />

    <TextView
        android:id="@+id/textviewEmailAddress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textviewLogo"
        android:text="Email Address"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/edittextEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_marginBottom="10dp"
        android:inputType="textEmailAddress"
        android:layout_below="@+id/textviewEmailAddress">

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textviewPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_below="@+id/edittextEmailAddress" />

    <EditText
        android:id="@+id/edittextPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_marginBottom="10dp"
        android:inputType="textPassword"
        android:layout_below="@+id/textviewPassword" />

    <Button
        android:id="@+id/buttonSubmit"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edittextPassword"
        android:layout_marginBottom="20dp"
        android:text="Sign In" />

</RelativeLayout>

 


 

리스트 다이얼로그

 

String[] items =  {"1", "2", "3", "4"};

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("번호를 선택하세요.");

dialog.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int pos) {
        String item = items[pos];
        Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
    }
});
dialog.show();

 


 

입력 창 예제

 

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("타이틀");
dialog.setMessage("콘텐드");
dialog.setView(editText);
dialog.setPositiveButton("확인",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(),editText.getText().toString() ,Toast.LENGTH_LONG).show();
            }
        });
dialog.setNegativeButton("취소",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
dialog.show();

 


 

다중 선택 다이얼로그

 

final EditText editText = new EditText(MainActivity.this);
String[] items = {"1", "2", "3", "4"};
final List selectedItems  = new ArrayList();

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("타이틀");
dialog.setMultiChoiceItems(items, null,
        new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which,
                                boolean isChecked) {
                if (isChecked) {
                    selectedItems.add(which);
                } else if (selectedItems.contains(which)) {
                    selectedItems.remove(Integer.valueOf(which));
                }
            }
        });
dialog.setPositiveButton("확인",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                String output = "";
                for (int i = 0; i < selectedItems.size(); i++) {
                    int index = (int) selectedItems.get(i);
                    output += items[index] + "\n";
                }
                Toast.makeText(getApplicationContext(), output , Toast.LENGTH_SHORT).show();
            }
        });
dialog.setNegativeButton("취소",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
dialog.show();

 


 

단일 선택 리스트

 

 

String[] items = {"1번", "2번", "3번", "4번"};
final List selectedItems  = new ArrayList();
int[] selectedItem = {0};

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("타이틀");
builder.setSingleChoiceItems(items, 0,
        new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                selectedItem[0] = which;
            }
        });
builder.setPositiveButton("확인",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                String output = items[selectedItem[0]];
                Toast.makeText(getApplicationContext(), output, Toast.LENGTH_SHORT).show();

            }
        });
builder.setNegativeButton("취소",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
builder.show();

 


 

로그인 창 다이얼로그

 

void show() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = getLayoutInflater();
    View view = inflater.inflate(R.layout.dialog_login, null);
    builder.setView(view);
    final Button submit = (Button) view.findViewById(R.id.buttonSubmit);
    final EditText email = (EditText) view.findViewById(R.id.edittextEmailAddress);
    final EditText password = (EditText) view.findViewById(R.id.edittextPassword);

    final AlertDialog dialog = builder.create();
    submit.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String strEmail = email.getText().toString();
            String strPassword = password.getText().toString();
            Toast.makeText(getApplicationContext(), strEmail + "/" + strPassword, Toast.LENGTH_LONG).show();

            dialog.dismiss();
        }
    });

    dialog.show();
}

 

# dialog_login.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp" >

    <TextView
        android:id="@+id/textviewLogo"
        android:layout_width="221dp"
        android:layout_height="54dp"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        android:textSize="40sp"
        android:text="Login" />

    <TextView
        android:id="@+id/textviewEmailAddress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textviewLogo"
        android:text="Email Address"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/edittextEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_marginBottom="10dp"
        android:inputType="textEmailAddress"
        android:layout_below="@+id/textviewEmailAddress">

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textviewPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_below="@+id/edittextEmailAddress" />

    <EditText
        android:id="@+id/edittextPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_marginBottom="10dp"
        android:inputType="textPassword"
        android:layout_below="@+id/textviewPassword" />

    <Button
        android:id="@+id/buttonSubmit"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edittextPassword"
        android:layout_marginBottom="20dp"
        android:text="Sign In" />

</RelativeLayout>

 

 


 

DialogFragment (Activity 에서 호출하는 경우)

 

 

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;

public class DialogFragmentExample extends DialogFragment {
 
    public interface OnCompleteListener{
        void onInputedData(String id, String pass);
    }
 
    private OnCompleteListener mCallback;

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);

        try {
            mCallback = (OnCompleteListener) context;
        }
        catch (ClassCastException e) {
            Log.d("DialogFragmentExample", "Activity doesn't implement the OnCompleteListener interface");
        }
    }
 
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialog_login, null);
        builder.setView(view);
        final Button submit = (Button) view.findViewById(R.id.buttonSubmit);
        final EditText email = (EditText) view.findViewById(R.id.edittextEmailAddress);
        final EditText password = (EditText) view.findViewById(R.id.edittextPassword);
 
        submit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String strEmail = email.getText().toString();
                String strPassword = password.getText().toString();
                dismiss();
                mCallback.onInputedData(strEmail, strPassword);
            }
        });
 
        return builder.create();
    }
}

 

 

DialogFragment newFragment = new DialogFragmentExample();
newFragment.show(getSupportFragmentManager(), "dialog");

 

 


 

DialogFragment (Fragment 에서 호출하는 경우)

 

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;

public class DialogFragmentExample extends DialogFragment{

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialog_login, null);
        builder.setView(view);
        final Button submit = (Button) view.findViewById(R.id.buttonSubmit);
        final EditText email = (EditText) view.findViewById(R.id.edittextEmailAddress);
        final EditText password = (EditText) view.findViewById(R.id.edittextPassword);

        submit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String strEmail = email.getText().toString();
                String strPassword = password.getText().toString();

                Intent data = new Intent();
                data.putExtra ("id", strEmail );
                data.putExtra ("pass", strPassword );

                getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, data);

                dismiss();
            }
        });

        return builder.create();
    }
}

 

 

public static final int DIALOG_REQUEST_CODE = 1234;
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == DIALOG_REQUEST_CODE) {

        if (resultCode == Activity.RESULT_OK) {
            String id = data.getExtras().getString("id");
            String pass = data.getExtras().getString("pass");

            Toast.makeText(getActivity(), id+"/"+pass, Toast.LENGTH_LONG).show();
        }
    }
}

void show()
{
    DialogFragment newFragment = new DialogFragmentExample();
    newFragment.setTargetFragment(this, DIALOG_REQUEST_CODE );
    newFragment.show(getParentFragmentManager(), "dialog"); //"dialog"라는 태그를 갖는 프래그먼트를 보여준다.
}

 

 


 

홍드로이드 예제

 

Button button = (Button) findViewById(R.id.button);
TextView textView = (TextView) findViewById(R.id.textView);

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
        dialog.setIcon(R.mipmap.ic_launcher);
        dialog.setTitle("다이얼로그");
        dialog.setMessage("다이얼로그 테스트입니다.");

        final EditText editText = new EditText(MainActivity.this);
        dialog.setView(editText);

        dialog.setPositiveButton("확인", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String result = editText.getText().toString();
                textView.setText(result);
                dialog.dismiss();
            }
        });

        dialog.setNegativeButton("취소", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        dialog.show();
    }
});

 


 

안드로이드 개념 및 예제 – AlertDialog
https://webnautes.tistory.com/1094

 

안드로이드 앱 만들기 #16 (Dialog 다이얼로그 팝업창) – 홍드로이드
https://youtu.be/SmsshpB1O38

 

홍드로이드 github
https://github.com/hongdroid94/16_Dialog

 

 

 

 

 

 

 

 

 

Related posts

Leave a Comment