본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Dialog 에 대한 모든 것.

by 돼지왕 왕돼지 2012. 2. 18.
반응형


안녕하세요. 돼지왕 왕돼지입니다.
오늘은 Dialog에 대한 모든 것이라는 주제로 한번 이야기해보겠습니다.


Dialog 생성 ( 대화상자 생성 )

 
<APIs>

AlertDialog.Builder(Context ocntext)
 
AlertDialog.Builder setMessage (CharSequence message)
AlertDialog.Builder setTitle (CharSequence title)
AlertDialog.Builder setIcon (int iconId)
 
AlertDialog show()
AlertDialog create()

setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener)
setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) 

AlertDialoglBuilder setCancelable (boolean cancelable) // back 버튼으로 닫을 수 없다.  
 


<example 1>

AlertDialog.Builder bld = new AlertDialog.Builder(.this);
bld.setTitle("Notice");
bld.setMessage("This is Dialog box test");
bld.setIcon(R.drawable.icon);
bld.show(); 
 
 
<example 2>

new AlertDialog.Builder(.this)
   .setTitle("Notice")
   .setMessage("This is Dialog box test")
   .setIcon(R.drawable.icon)
   .setPositiveButton("Close", new DialogInterface.OnClickListerner(){
      public void onClick(DialogInterface dialog, int whichButton){
         // To Do
      }
   });
   .show(); 
 cf) DialogInterface.OnClickListener() 를 null 로 주면 기본동작인 "닫기"를 수행
cf2) whichButton 은 DialogInterface.BUTTON1 , BUTTON2,  BUTTON3 으로 매핑
  

 
 
 

Dialog 미리 생성하기. ( activity 에 귀속된 녀석 )

 
 : 기본적 대화상자들은 화면에서 사라지면 가비지 컬렉터에 의해 자동으로 해제됩니다.
   하지만 복잡한 모양의 대화상자 (예를 들면 커스톰 대화상자)의 경우 반응성이 나빠지기 쉽죠.
 
<APIs>

void showDialog(int id)
void dismissDialog (int id)
void removeDialog (int id)
 
Dialog onCreateDialog (int id)
void onPrepareDialog (int id, Dialog dialog) 


 <example>

final static int SampleDialog = 0;
final static int QuestionDialog = 1;
 
showDialog(SampleDialog);
showDialog(QuestionDialog);
 
protected Dialog onCreateDialog(int id){
   switch (id){
   case SampleDialog:
      return newAlertDialog.Builder(.this)
                  .setTitle("Notice")
                  .setMessage("DialogBox is opened")
                  .setIcon(R.drawable.icon)
                  .setPositiveButton("Close", null)
                  .create();
   case QuestionDialog:
      return new AlertDialog.Builder(.this)
                  .setTitle("Question")
                  .setMessage("Are you a student?")
                  .setPositiveButton("Yes", null)
                  .setNegativeButton("No", null)
                  .create();
   }
   return null;
}
 
protected void onPrepareDialog (int id, Dialog dialog){
   super.onPrepareDialog(id, dialog);
   switch (id){
   case SampleDialog:
      break;
   case QuestionDialog:
      Calendar calendar = Calendar.getInstance();
      String stime = String.format("%dhour %dminute %dsecond",
                              calendar.get(Calendar.HOUR_OF_DAY),
                              calendar.get(Calendar.MINUTE),
                              calendar.get(Calendar.SECOND));
      dialog.setTitle(stime);
      break;
   }
}

 

 
 
  

List Dialog

 
<APIs>

setItems (CharSequence[] items, DialogInterface.OnClickListener listener)
setItems (int itemsId, DialogInterface.OnClickListener listener)
 -> 첫번째 param : 사용자에게 보여줄 목록.
 -> List Item을 클릭하면 반응할 OnClickListener.
 

setSingleChocieItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)
setSingleChoiceItems (int itemsId, int checkedItem, DialogInterface.OnClickListener listener)
setISingleChoiceItems (ListAdapter adapter, int checkedItem, DialogInterface.OnClickListener listener)
setSingleChoiceItems (Cursor cursor, int checkedItem, String labelColumn, DialogInterface.OnClickListener listener)
  -> 기본 check 를 안 주려면 checkedItem에 -1 값 입력
  -> OnClickListener 를 null 로 주면 list를 클릭했을 때 선택만 되고 처리는 확인, 취소에서 해주는 형태가 됨.


setMultiChoiceItems (CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)
setMultiChoceItems (int itemsId, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)
setMultiChocieItems (Cursor cursor, String isCheckedColumn, String labelColumn, DialogInterface.OnMultiChoiceClickListener listener)
 
void onClick (DialogInterface dialog, int which, boolean isChecked)



<example 1>

<java>
new AlertDialog.Builder(.this)
   .setTitle("Select food")
   .setIcon(R.drawable.icon)
   .setItems(R.array.foods, new DialogInterface.OnClickListener(){
      public void onClick(DialogInterface dialog, int which){
         String[] foods = getResources().getStringArray(R.array.foods);
         TextView text = (TextView)findViewById(R.id.text);
         text.setText("Selected food = " + foods[which]);
      }
   })
   .setNegativeButton("Cancel", null)
   .show();
 
<xml>
<string-array name="foods">
   <item>Noodle</item>
   <item>Rice</item>
   <item>Hamburger</item>
</string-array> 


 <example 2>

int mSelect = 0;
 
new AlertDialog.Builder(.this)
   .setTitle("Select food")
   .setIcon(R.drawable.icon)
   .setSingleChoiceItems(R.array.foods, mSelect, new DialogInterface.OnClickListener(){
      public void onClick(DialogInterface dialog, int which){
         mSelect = which;
      }
   }
   .setPositiveButton("Ok", new DIalogInterface.OnClickListener(){
      public void onClick(DialogInterface dialog, int whichButton){
         // To Do
      }
   }
   .setNegativeButton("Cancel", null)
   .show(); 
 
 
 <example 3>

boolean[] mSelect = {false, false, false};
 
new AlertDialog.Builder(.this)
   .setTitle("Select food")
   .setIcon(R.drawable.icon)
   .setMultiChocieItems(R.array.foods, mSelect, new DialogInterface.OnMultiChoiceClickListener(){
      public void onClick(DialogInterface dialog, int which, boolean isChecked){
         mSelect[which] = isChecked;
      }
   })
   .setPositiveButton("Ok", new DIalogInterface.OnClickListener(){
      public void onClick(DialogInterface dialog, int whichButton){
         // To Do
      }
   }
   .setNegativeButton("Cancel", null)
   .show(); 
  
 
로그인 없이 추천 가능합니다. 손가락 꾸욱~





반응형

댓글