안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
onCreateOptionsMenu(Menu menu) 와 onOptionsItemSelected(MenuItem item) 를 이용해서
Menu와 Submenu를 만드는 것, 그리고 Menu에 대한 이벤트 처리까지는 알겠는데,
서브 메뉴에 대한 이벤트 처리를 어떻게 하는지 모르겠습니다.
즉 디바이스에 있는 메뉴 버튼을 눌러서 나오는 나오는 버튼을 클릭한 후 서브로 뜨는 버튼을 클릭했을 때
해당 기능을 수행해야 하는데...서브 메뉴가 나오는 것 까진 했는데 그 다음 이벤트 처리를 어떻게 해야 하는지 도통 모르겠습니다.
도움 부탁드립니다. ㅠㅠ
onCreateOptionsMenu(Menu menu) 와 onOptionsItemSelected(MenuItem item) 를 이용해서
Menu와 Submenu를 만드는 것, 그리고 Menu에 대한 이벤트 처리까지는 알겠는데,
서브 메뉴에 대한 이벤트 처리를 어떻게 하는지 모르겠습니다.
즉 디바이스에 있는 메뉴 버튼을 눌러서 나오는 나오는 버튼을 클릭한 후 서브로 뜨는 버튼을 클릭했을 때
해당 기능을 수행해야 하는데...서브 메뉴가 나오는 것 까진 했는데 그 다음 이벤트 처리를 어떻게 해야 하는지 도통 모르겠습니다.
도움 부탁드립니다. ㅠㅠ
2010.06.28 17:11:11
네, 그게 메뉴까지는 그렇게 적용을 했는데, 서브 메뉴는 어떤 식으로 적용을 할지 몰라서요.. ;;
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(menu.NONE, 1, menu.NONE, "메일쓰기").setIcon(R.drawable.listbtn_mail);
SubMenu MailBoxChange =
menu.addSubMenu(menu.NONE,2,menu.NONE,"편지함 변경").setIcon (R.drawable.mailicon_clipboard_land); // SubMenu를 쓴 부분입니다.
menu.add(menu.NONE, 3, menu.NONE, "검색").setIcon(R.drawable.topbtn_search);
menu.add(menu.NONE, 4, menu.NONE, "새로고침").setIcon(R.drawable.bottombtn_icon_back_press);
menu.add(menu.NONE, 5, menu.NONE, "삭제").setIcon(R.drawable.listbtn_delete);
menu.add(menu.NONE, 6, menu.NONE, "홈").setIcon(R.drawable.topbtn_home);
MailBoxChange.add("받은 편지함");
MailBoxChange.add("보낸 편지함");
MailBoxChange.add("임시 편지함");
return true;
}
public boolean onOptionsItemSelected(MenuItem item, MenuItem subitem)
{
switch (item.getItemId())
{
case 1:
writeMail(); // 편지 쓰기
return true;
case 2:
// <-- 여기 case 두번째 부분에 서브 메뉴(받은 메일함, 보낸메일함, 임시 메일함)가 들어가는데, 서브메뉴를 타고 들어가서 각각의 메일함으로 이동 시키려면 어떻게 해야 할지 몰겠습니다. ㅠㅠ
return true;
case 3:
onSearch(); // 찾기
return true;
case 4:
refleshRecdvedMail(); // 새로고침
return true;
case 5:
go_delete(); //삭제
return true;
case 6:
goHome(); // 홈으로 가기
return true;
}
return false;
}
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(menu.NONE, 1, menu.NONE, "메일쓰기").setIcon(R.drawable.listbtn_mail);
SubMenu MailBoxChange =
menu.addSubMenu(menu.NONE,2,menu.NONE,"편지함 변경").setIcon (R.drawable.mailicon_clipboard_land); // SubMenu를 쓴 부분입니다.
menu.add(menu.NONE, 3, menu.NONE, "검색").setIcon(R.drawable.topbtn_search);
menu.add(menu.NONE, 4, menu.NONE, "새로고침").setIcon(R.drawable.bottombtn_icon_back_press);
menu.add(menu.NONE, 5, menu.NONE, "삭제").setIcon(R.drawable.listbtn_delete);
menu.add(menu.NONE, 6, menu.NONE, "홈").setIcon(R.drawable.topbtn_home);
MailBoxChange.add("받은 편지함");
MailBoxChange.add("보낸 편지함");
MailBoxChange.add("임시 편지함");
return true;
}
public boolean onOptionsItemSelected(MenuItem item, MenuItem subitem)
{
switch (item.getItemId())
{
case 1:
writeMail(); // 편지 쓰기
return true;
case 2:
// <-- 여기 case 두번째 부분에 서브 메뉴(받은 메일함, 보낸메일함, 임시 메일함)가 들어가는데, 서브메뉴를 타고 들어가서 각각의 메일함으로 이동 시키려면 어떻게 해야 할지 몰겠습니다. ㅠㅠ
return true;
case 3:
onSearch(); // 찾기
return true;
case 4:
refleshRecdvedMail(); // 새로고침
return true;
case 5:
go_delete(); //삭제
return true;
case 6:
goHome(); // 홈으로 가기
return true;
}
return false;
}
2010.06.28 17:28:56
서브메뉴의 id값이 2라고 2에서 어떻게 하는것이 아니라 서브메뉴에 아이템을 add 하실때
서브메뉴 아이템에도 id값을 부여 하셔서 그걸 쓰시면 됩니다.
2010.06.28 18:15:11
아, 감사합니다. 노이님이 설명해 주신 대로 하니, 잘 되네요 ^^
LetterChange1.add(0,22,0,"받은 편지함");
LetterChange1.add(0,23,0,"보낸 편지함");
LetterChange1.add(0,24,0,"임시 편지함");
case 22:
TestButton.setText("받은편지함");
return true;
case 23:
TestButton.setText("보낸편지함");
return true;
case 24:
TestButton.setText("임시편지함");
return true;
LetterChange1.add(0,22,0,"받은 편지함");
LetterChange1.add(0,23,0,"보낸 편지함");
LetterChange1.add(0,24,0,"임시 편지함");
case 22:
TestButton.setText("받은편지함");
return true;
case 23:
TestButton.setText("보낸편지함");
return true;
case 24:
TestButton.setText("임시편지함");
return true;
onOptionsItemSelected(MenuItem item)까지 하셨으면 다 되신건데요. 여러가지 방법이 있겠지만 저 같은 경우에는
onOptionsItemSelected(MenuItem item)에 switch (item.getItemID()) 스위치문을 넣어서
눌러진 메뉴의 id값과 case문에 적힌 id값을 비교 하는식으로 했습니다.