본문 바로가기

Dead Code/DEPRECATED-KOTLIN

[코틀린코드연습장] ContextMenu from Udemy



컨텍스트뷰는 길게 터치했을때 나오는 메뉴이다.

텍스트뷰와 리스트뷰에 간단하게 붙여본다.


간..단..하..게..ㅠㅜ 어렵다.


몇일 공부는 안해봤지만, 주워다 쓰는 느낌이 강하고, 모르면 아예 못하는 것들이 많다.

자바를 모르는 나에게 역주행은 힘들다.

그냥... 일단은 외워보자.








// 텍스트뷰와 리스트뷰에 컨텍스트 메뉴 붙이기 실습 from Udemy 강좌
class MainActivity : AppCompatActivity() {

// 리스트에 붙일 데이터
var data = arrayOf("data1","data2","data3","data4","data5","data6","data7")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 텍스트뷰에 기본으로 들어갈 텍스트
textView.text = "main page Text"
// 리스트뷰 아답터
var adapter = ArrayAdapter(this,android.R.layout.simple_list_item_1, data)
listView.adapter = adapter
// 리스트뷰 클릭 리스너
// 리스트항목을 클릭하면 항목의 position값을 텍스트뷰에 나오게 한다
listView.setOnItemClickListener { parent, view, position, id ->
textView.text = "${position +1 } 번째 항목 터치"
}
// 컨텍스트 메뉴 등록(텍스트뷰와 리스트뷰)
registerForContextMenu(textView)
registerForContextMenu(listView)
}
// 컨텍스트 메뉴의 구성 onCreateContextMenu
override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
super.onCreateContextMenu(menu, v, menuInfo)
// 넘어오는 뷰의 아이디값으로 분기하여, 어떤 컨텍스트 메뉴를 붙일지 정해준다.
when(v?.id) {
// 텍스트뷰일 경우
R.id.textView -> {
// 메뉴의 소제목
menu?.setHeaderTitle("textContextMenu")
// 미리 만들어놓은 컨텍스트 메뉴를 호출
menuInflater.inflate(R.menu.ctx_menu1_item1, menu)
}
// 리스트뷰일 경우, 항목별로 다른 메뉴가 나타나게 할 예정
R.id.listView -> {
// 리스트에서 몇번째 항목인지 확인할 수 있는 값을 찾는다
var info = menuInfo as AdapterView.AdapterContextMenuInfo
// 짝수번재 항목이면 menu3번을 호출
if(info.position % 2 ==0) {
menu?.setHeaderTitle("listContextMenu2")
menuInflater.inflate(R.menu.menu3, menu)
}
// 그렇지 않으면 menu2번을 호출
else{
menu?.setHeaderTitle("listContextMenu")
menuInflater.inflate(R.menu.ctx_menu2, menu)
}
}
}
}
// 컨텍스트 메뉴를 눌렀을때 발생하는 이벤트 처리
override fun onContextItemSelected(item: MenuItem?): Boolean {
// 클릭된 메뉴 아이템이 넘어온다. 아이템아이디 값으로 분기하여 처리
when(item?.itemId){
R.id.item1 ->
textView.text = "context menu item 1"
R.id.item2 ->
textView.text = "it is context menu item2"
R.id.item3 ->
     textView.text = "list context menu item3"
R.id.item4 ->
textView.text = "list context menu item4"
R.id.item5 ->
textView.text = "list context menu item5"
}
// 기본 리턴값은 그대로
return super.onContextItemSelected(item)
}
}