[안드로이드] 리스트 뷰(ListView) 사용하기
- 모바일/안드로이드
- 2024. 1. 17.
반응형
아이폰과 마찬가지로 모바일 환경에서 가장 많이 사용되는 형태의 UI가 리스트입니다. 안드로이드 리스트 뷰는 안드로이드에서 가장 많이 사용되는 컴포넌트 중에 하나로 다음과 같은 특징을 가지고 있습니다.
- 레이아웃과 같은 뷰 그룹에 속함
- 어뎁터(Adapter)를 통해 데이터와 리스트 뷰를 연결
- 오래전부터 사용 가능 했으며 API Level 1 부터 존재
- 프래그먼트를 사용할 경우 this 컨텍스트를 사용할 수 없기 때문에
getActivity()
함수를 사용 - 프래그먼트를 사용할 경우
LayoutInflater
를 사용해 뷰를 가져옴
리스트 뷰 생성
아이디가 listview1
인 리스트 뷰를 선언한다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/listview1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
데이터 정의
다음과 같이 데이터를 정의한다.
class MainActivity : AppCompatActivity() {
val LIST_MENU = arrayOf("LIST1", "LIST2", "LIST3")
...
}
어뎁터 연결
ArrayAdapter를 만들고 simple_list_item1을 선언한 뒤 기존에 만든 LIST_MENU 데이터를 연결하고 listview에 어뎁터를 연결한다.
val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, LIST_MENU)
val listview = findViewById<ListView>(R.id.listview1)
listview.adapter = arrayAdapter
미리 정의 된 xml 파일 | 설명 |
---|---|
simple_list_item_1 | 텍스트 뷰 하나로 구성된 레이아웃 |
simple_list_item_2 | 텍스트 뷰 두개로 구성된 레이아웃 |
simple_list_item_checked | 오른쪽에 체크 표시가 됨 |
simple_list_item_single_choice | 오른쪽에 라디오 버튼이 나옴 |
simple_list_item_multiple_choice | 오른쪽에 체크버튼이 나옴 |
아이템 선택
아이템을 선택하고 해당 데이터를 출력한다.
listview.onItemClickListener = object : AdapterView.OnItemClickListener {
override fun onItemClick(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
val strText = parent?.getItemAtPosition(position) as String
Log.d("프린트 로그", strText)
}
}
프래그먼트 뷰에서 리스트 뷰 사용하기
프래그먼트(Fragment)에서 뷰를 사용하려면 다음과 같이 onCreateView
에서 fragment 화면을 반환하기 전에 어뎁터와 뷰를 연결해줘야 한다.
class AFragment: Fragment() {
val LIST_MENU = arrayOf("LIST1", "LIST2", "LIST3")
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val fragmentView = inflater.inflate(R.layout.fragment_a, container, false)
val adapter =
activity?.let { ArrayAdapter(it, android.R.layout.simple_list_item_1, LIST_MENU) }
val listView = fragmentView.findViewById<ListView>(R.id.listview1)
listView.adapter = adapter
return fragmentView
}
}
반응형
'모바일 > 안드로이드' 카테고리의 다른 글
[안드로이드] 리스트 뷰(ListView) XML 데이터로 바인딩 하기 (0) | 2024.02.01 |
---|---|
[안드로이드] findViewById 대신 뷰 바인딩 사용하기 (0) | 2024.01.25 |
[Android] 안드로이드 뷰와 뷰 그룹, 레이아웃 종류 (0) | 2022.04.12 |
[Android] 안드로이드 앱 우선순위 및 액티비티 생명주기 (0) | 2022.04.11 |
[Android] 안드로이드 뷰 바인딩, findViewById (0) | 2022.04.09 |