listview (2) : viewmodel이용

쿵ㅇ양·2024년 1월 9일
0

Android

목록 보기
14/30

listview는 너무 어렵다...
차근히 복습하자!

viewmodel 사용 안했을때

:list_item을 선언하고 하나하나씩 list_item에 넣어줌

val list_item = mutableListOf<String>()

list_item.add("A")
list_item.add("B")
list_item.add("C")

viewmodel 사용하는 방법

1.activity_main.xml

ListView 선언해주기

<?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>

2.listview_item.xml

listviewdp에 들어갈 item 만들어주기
(여기서는 textview로!)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="80dp">

    //text1
    <TextView
        android:id="@+id/listviewid"
        android:text="text"
        android:layout_margin="20dp"
        android:textSize="20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
        
        
     //text2
    <TextView
        android:id="@+id/listviewid2"
        android:text="text"
        android:layout_margin="20dp"
        android:textSize="10sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>


</LinearLayout>

3.ListViewModel

listviewmodel에 들어갈 데이터를 저장하기 위해 data class!!

package com.example.learn5_ex

//data class로 선언
data class ListViewModel (

    //listviewmodel에 들어갈 문자열 데이터
    val text1 : String,
    val text2 : String
)

4.ListViewAdapter

package com.example.learn5_ex

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView

//MutableList입력받음!!
//데이터 입력 받는데 문자열 아닌 모델 받음
class ListViewAdapter(val List : MutableList<ListViewModel>):BaseAdapter() {
    override fun getCount(): Int {
    
        //list 크기(중요!)
        return List.size
    }

    override fun getItem(position: Int): Any {

        //특정 position에 있는 list 반환
        return List[position]
    }

    override fun getItemId(position: Int): Long {
    
         //list에서 특정 위치의 id 반환
        return position.toLong()
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {

        var convertView = convertView

        //list = [
        // listviewmodel("a", "b"),
        // listviewmodel("c", "d"),
        // listviewmodel("e", "f")
        // ]

        if (convertView == null){
            convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item, parent,false)
        }


        //title=a,c,e
        // 첫 번째 TextView에서 데이터를 찾아 설정
        val title = convertView!!.findViewById<TextView>(R.id.listviewid)
        
        //listviewmodel에서 선언한 문자열데이터 text1
        title.text = List[position].text1

      
        //title2 = b,d,f
        // 두 번째 TextView에서 데이터를 찾아 설정
        //title2까지 넣어주기 위해 listview_item.xml에서 textview 하나 더 만들고 똑같이 코드 짬
        val title2 = convertView!!.findViewById<TextView>(R.id.listviewid2)
        
        //listviewmodel에서 선언한 문자열데이터 text2
        title2.text = List[position].text2


        return convertView!!
    }


}

5. MainActivity

Adapter와 listview 연결

package com.example.learn5_ex

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.Toast

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

     //listview에 들어갈 데이터 넣어주기
    //listviewmodel로 데이터 넣어줬기 때문에 String이 아닌ListViewModel이 들어감
        val list_item2 = mutableListOf<ListViewModel>()
        list_item2.add(ListViewModel("a", "b"))
        list_item2.add(ListViewModel("c", "d"))
        list_item2.add(ListViewModel("e", "f"))

       //listview를 id 이용해 가져오기
        val listview = findViewById<ListView>(R.id.mainListView)

        //어댑터선언:어댑터가 list_item2를 listview에 넣어주기 위해 맞게 변환시켜줌
        val listviewadapter = ListViewAdapter(list_item2)
        
        //listview의 어댑터 = listviewadapter
        listview.adapter = listviewadapter

       
    }
}
profile
개발을 공부하고 있는 대학생

0개의 댓글

관련 채용 정보