1. ContextMenu란?
- 화면에 배치된 뷰에 설정할 수 있는 메뉴
- 메뉴가 설정된 뷰를 길게 누르면 메뉴가 나타난다.
- 길게 눌러야 나오기 때문에 직관적인 메뉴가 아니고, 보통 리스트뷰에 넣어서 나온다.
2. registerForContext
- 컨텍스트 메뉴를 등록하는 메서드
- 메서드의 매개 변수로 넣어준 뷰 객체에 컨텍스트 메뉴가 설정된다.
3. onCreateContextMenu
- 뷰를 길게 누르면 컨텍스트메뉴가 호출되는 메서드
- 여기에서 컨텍스트 메뉴를 구성한다.
4. OnContextItemSelected
- 사용자가 메뉴를 선택했을 때 호출되는 메서드
5. 생성 순서
1. 컨텍스트 메뉴를 뷰에 세팅
// 1. 컨텍스트 메뉴를 뷰에 세팅
registerForContextMenu(textView)
registerForContextMenu(listview)
2. 길게 누른 View를 찾아 컨텍스트 메뉴 구성
- 만약 리스트뷰의 항목마다 컨텍스트 메뉴를 다르게 하고싶다면, 선택한 항목이 리스트뷰의 몇번째 항목인지는 menuInfo 매개변수로 넘어온다.
- menuInfo를 AdapterView.AdapterContextMenuInfo를 형 변환해서 position을 얻어온다.
// 두번째 매개변수가 유저가 길게 누른 View.
// 만약에 리스트뷰의 항목마다 컨텍스트메뉴를 다르게 가고싶다면, 선택한 항목이 리스트뷰의 몇번째 항목인지는 menuInfo 매개변수로 넝머온다.
override fun onCreateContextMenu(
menu: ContextMenu?,
v: View?,
menuInfo: ContextMenu.ContextMenuInfo?
) {
super.onCreateContextMenu(menu, v, menuInfo)
when(v?.id)
{
R.id.textView -> {
menu?.setHeaderTitle("텍스트뷰의 메뉴") // 컨텍스트뷰의 제목
menuInflater.inflate(R.menu.textview_menu, menu) // xml파일로 만들어준 menu
}
R.id.listview ->
{
menu?.setHeaderTitle("리스트뷰의 메뉴")
menuInflater.inflate(R.menu.listview_menu,menu)
// 사용자가 길게누른 리스트뷰의 항목
var info = menuInfo as AdapterView.AdapterContextMenuInfo
if(info.position % 2 == 0)
{
// 짝수번째 리스트뷰 항목을 눌렀을 때 메뉴를 3개로 추가시킨다.
menu?.add(Menu.NONE, Menu.FIRST + 100, Menu.NONE, "리스트뷰 메뉴3")
}
}
}
}
3. 선택된 컨텍스트 메뉴에 따른 반응 세팅
- 리스트뷰의 몇 번째 항목이 선택되었는지는 item의 menuInfo를 AdapterContextMenuInfo로 캐스팅해서 사용한다.
// 사용자가 길게 누른 View객체의 주소값이 넘어오지 않는다.
// 따라서 메뉴 아이템의 id값을 다 다르게 만들어야 여기서도 알 수 있다.
// 이 함수에서 사용자가 누른 리스트뷰가 몇 번째 항목인지 알려면!
override fun onContextItemSelected(item: MenuItem): Boolean {
when(item?.itemId)
{
R.id.textview_Item1 ->
textView.text = "존예"
R.id.textview_Item2 ->
textView.text = "지존"
R.id.listview_item1 ->
{
textView.text = "리스트뷰_존예"
var info = item?.menuInfo as AdapterView.AdapterContextMenuInfo
textView.append("${info.position}째 항목")
}
R.id.listview_item2 ->
{
textView.text = "리스트뷰_지존"
var info = item?.menuInfo as AdapterView.AdapterContextMenuInfo
textView.append("${info.position}째 항목")
}
}
return super.onContextItemSelected(item)
}
'Deperecated > Android_강의' 카테고리의 다른 글
안드로이드 - ActionBar (0) | 2020.02.13 |
---|---|
안드로이드 - PopupMenu (0) | 2020.02.13 |
안드로이드 - 메뉴 - OptionMenu (0) | 2020.02.12 |
안드로이드 - ViewPager (1) | 2020.02.12 |
안드로이드 - Spinner (0) | 2020.02.12 |