간단한 Dialog
간단한 Dialog 를 만들어 봤다. ref. 1 의 소스를 거의 가져다 썼다. 이 곳의 소스는 DialogFragment 를 사용하는 방법이고, 예전에 쓰던 방식에 대한 소스(조금 더 오래된 소스)는 아래 링크에서 볼 수 있다.
여기서 적용해 보지는 않았지만, 화면이 작아지거나 할 때, Dialog 를 Fragment 의 형태로 create 되기도 한다. 관련된 code 는 ref. 1 을 확인하자.
Full source
전체 소스는아래에서 확인할 수 있다.
public class MainActivity extends AppCompatActivity
implements MyDialog.MyDialogListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.btn_show_dialog);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNoticeDialog();
}
});
}
public void showNoticeDialog() {
// Create an instance of the dialog fragment and show it
DialogFragment dialog = new MyDialog();
dialog.show(getSupportFragmentManager(), "MyDialogFragment");
}
// The dialog fragment receives a reference to this Activity through the
// Fragment.onAttach() callback, which it uses to call the following methods
// defined by the NoticeDialogFragment.NoticeDialogListener interface
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
// User touched the dialog's positive button
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
}
@Override
public void onDialogNegativeClick(DialogFragment dialog) {
// User touched the dialog's negative button
Toast.makeText(this, "No", Toast.LENGTH_LONG).show();
}
}
public class MyDialog extends DialogFragment { /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ public interface MyDialogListener { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } /** The system calls this only when creating the layout in a dialog. */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // Get the layout inflater LayoutInflater inflater = getActivity().getLayoutInflater(); // Inflate and set the layout for the dialog // Pass null as the parent view because its going in the dialog layout builder.setView(inflater.inflate(R.layout.dialog_select_box, null)) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // FIRE ZE MISSILES! mListener.onDialogPositiveClick(MyDialog.this); } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog mListener.onDialogNegativeClick(MyDialog.this); } }); // Create the AlertDialog object and return it return builder.create(); } // Use this instance of the interface to deliver action events MyDialogListener mListener; // Override the Fragment.onAttach() method to instantiate the MyDialogListener @Override public void onAttach(Activity activity) { super.onAttach(activity); // Verify that the host activity implements the callback interface try { // Instantiate the MyDialogListener so we can send events to the host mListener = (MyDialogListener) activity; } catch (ClassCastException e) { // The activity doesn't implement the interface, throw exception throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener"); } } }
댓글 없음:
댓글 쓰기