간단한 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"); } } }
댓글 없음:
댓글 쓰기