Android Studio) ListView란?

chaeyoung·2023년 1월 17일
0

Android Studio

목록 보기
4/13

리스트뷰(ListView)

데이터 목록을 화면에 출력하는 뷰(스크롤 이용해 화면넘길 수 있음)

  • 한 화면에 보여지는 부분을 뷰로 나타내고, 이후 필요한 경우에만 추가적으로 뷰를 더 나타냄

어댑터(Adapter)

데이터와 리스트뷰를 연결해주는 관리자(배열에 저장되어있는 데이터를 리스트뷰에 띄울 수 있게함)

  • res/activity_main.xml: ListView라는 layout를 만들어줌

    <?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/mainListview"
           android:layout_width="match_parent"
           android:layout_height="match_parent"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
    
  • MainActivity.kt

     class MainActivity : AppCompatActivity() {
         override fun onCreate(savedInstanceState: Bundle?) {
    
             super.onCreate(savedInstanceState)
             setContentView(R.layout.activity_main)
    
             val listView = findViewById<ListView>(R.id.mainListview)
    
             val list_item2 = mutableListOf<ListViewModel>()	// ListViewModel의 데이터 형태를 가져옴
    
             list_item2.add(ListViewModel("a","b"))
             list_item2.add(ListViewModel("c","d"))
             list_item2.add(ListViewModel("e","f"))
    
             val listviewAdapter = ListViewAdapter(list_item2)
             listView.adapter = listviewAdapter
    
             listView.setOnItemClickListener { parent, view, position, id ->
                 Toast.makeText(this, list_item[p0],Toast.LENGTH_LONG).show()
             }
         }
     }
    
  • 데이터를 배열에 저장: list_item2 = mutableListOf<ListViewModel>(), 여기에 .add() 이용

  • 어댑터 생성: val listviewAdapter = ListViewAdapter(list_item2), item2로 생성됨

  • 어댑터를 리스트뷰에 연결: listView.adapter = (생성한어댑터)listviewAdapter

  • 클릭 이벤트 처리: listView.setOnItemClickListener { parent, view, position, id -> Toast.makeText(this,list_item[p0],Toast.LENGTH_LONG).show()}

    • 파라미터 값
      • parent: 클릭한 항목의 어댑터뷰(=parent는 리스트뷰)
      • view: 클릭한 항목의 뷰
      • position: 클릭한 항목의 인덱스
      • id: 클릭한 항목의 id
  • listViewAdapter.kt: 어댑터는 조종하는 역할(리스트뷰를 사용하려면 필수로 제작)

     class ListViewAdapter(val List: MutableList<ListViewModel>): BaseAdapter() {
       override fun getCount(): Int {
           return List.size
       }
    
       override fun getItem(p0: Int): Any {
           return List[p0]
       }
    
       override fun getItemId(p0: Int): Long {
           return p0.toLong()
       }
    
       override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
           var convertview = p1
    
           if(convertview == null){
               convertview = LayoutInflater.from(p2?.context).inflate(R.layout.listview_item, p2, false)
           }
    
           val title = convertview!!.findViewById<TextView>(R.id.listView_item)
           val title2 = convertview.findViewById<TextView>(R.id.listView_item2)
           title.text = List[p0].text1
           title2.text = List[p0].text2
    
           return convertview
       }}
    • override fun getView(): 화면 전체를 그리는 부분
    • getItem()은 전체적인 뷰 중 하나에 해당하는 아이템
    • getCoung()는 리스트 크기를 리턴해줌

0개의 댓글