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/ListView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
๋ฐ์ดํฐ ์๋ณธ์ด ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ์ ArrayAdapter๊ฐ์ฒด ์ฌ์ฉ
ArrayAdapter ์์ฑ์
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
- context: ํ์ฌ ์ปจํ
์คํธ
- resource: ํญ๋ชฉ์ผ๋ก ํ์๋ ํ
์คํธ ๋ทฐ์ ๋ฆฌ์์ค ID(์๋ก ๋ง๋ค์ง ์๊ณ ์๋๋ก์ด๋์์ ์ ๊ณตํ๋ ์๋์ ID๋ก ์ฌ์ฉ)
objects: ์ด๋ํฐ๋ก ๊ณต๊ธ๋ ๋ฐ์ดํฐ ์๋ณธ์ผ๋ก ๋จ์ ๋ฐฐ์ด
String ๋ฐฐ์ด์ ์ด์ฉํ ArrayAdapter ๊ฐ์ฒด ์์ฑ ์์
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// ๋ฐ์ดํฐ ์๋ณธ ์ค๋น
val items = arrayOf<String?>("item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8")
// ์ด๋ํฐ ์ค๋น (๋ฐฐ์ด ๊ฐ์ฒด ์ด์ฉ, simple_list_item_1 ๋ฆฌ์์ค ์ฌ์ฉ)
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) // ArrayAdapter๋ฅผ ์ธ ๊ฒ์ด๊ณ , ํ ์ค๋ง ๋์ค๋ ๋ทฐ ํ์์ ์ฐ๊ณ , ๊ฑฐ๊ธฐ์ ๋ฐ์ดํฐ ์๋ณธ items๋ฅผ ๋ฃ์ด์ค.
}
}
...
// ๋ฐ์ดํฐ ์๋ณธ ์ค๋น
val items = arrayOf<String?>("item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8")
// ์ด๋ํฐ ์ค๋น (๋ฐฐ์ด ๊ฐ์ฒด ์ด์ฉ, simple_list_item_1 ๋ฆฌ์์ค ์ฌ์ฉ)
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) // ArrayAdapter๋ฅผ ์ธ ๊ฒ์ด๊ณ , ํ ์ค๋ง ๋์ค๋ ๋ทฐ ํ์์ ์ฐ๊ณ , ๊ฑฐ๊ธฐ์ ๋ฐ์ดํฐ ์๋ณธ items๋ฅผ ๋ฃ์ด์ค.
binding.ListView.adapter = adapter // ์ adapter ๋ณ์๋ฅผ ListView ์ด๋ํฐ์ ์ฐ๊ฒฐํด ์ค.
}
}
GridView๋ 2์ฐจ์ ์คํฌ๋กค ๊ฐ๋ฅํ ๊ทธ๋ฆฌ๋์ ํญ๋ชฉ์ ํ์ํ๋ค.
<?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"
android:padding="10dp"
tools:context=".MainActivity">
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="100dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"/>
</androidx.constraintlayout.widget.ConstraintLayout>
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// ๋ฐ์ดํฐ ์๋ณธ ์ค๋น
val items = arrayOf<String?>("item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8")
// ์ด๋ํฐ ์ค๋น(๋ฐฐ์ด ๊ฐ์ฒด ์ด์ฉ, simple_list_item_1 ๋ฆฌ์์ค ์ฌ์ฉ)
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
// ์ด๋ํฐ๋ฅผ GridView ๊ฐ์ฒด์ ์ฐ๊ฒฐ
binding.gridview.adapter = adapter
}
}
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="100dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
class ImageAdapter :
BaseAdapter() { // BaseAdapter()๋ฅผ ๋ถ๋ฅด๋ฉด ์๋ฌ ๋จ๋ฉด์ implement members ํ๋ผ๊ณ ๋ฌ๋ค. ํด๋ฆญํ๋ฉด override fun๋ค์ด ์๋ ์์ฑ๋๋ค.
override fun getCount(): Int {
return mThumbIds.size
}
override fun getItem(position: Int): Any {
return mThumbIds[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val imageView: ImageView
if (convertView == null) {
imageView = ImageView(parent!!.context)
imageView.layoutParams = AbsListView.LayoutParams(200,200)
imageView.scaleType = ImageView.ScaleType.CENTER_CROP
imageView.setPadding(8, 8, 8, 8)
} else {
imageView = convertView as ImageView
}
imageView.setImageResource(mThumbIds.get(position)) // mThumbIds์ ์๋ ํด๋น ํฌ์ง์
์ ์ฌ์ง์ ๋ฃ๋๋ค.
return imageView
}
private val mThumbIds = arrayOf<Int>(
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
)
}
c. ์ด๋ํฐ๋ฅผ ์์ฑํ๊ณ GridView๊ฐ์ฒด์ ์ฐ๊ฒฐ(Kotlin์ฝ๋)
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// ImageAdapter ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ GridView ๊ฐ์ฒด์ ์ฐ๊ฒฐ
binding.gridview.adapter = ImageAdapter()
}
}
d. ํญ๋ชฉ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ
AdapterView์ ํญ๋ชฉ์ด ํด๋ฆญ ๋ ๋, ํธ์ถ๋๋ callbackmethod์ ์ธํฐํ์ด์ค
ํญ๋ชฉ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋ ์ถ๊ฐ
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// ImageAdapter ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ GridView ๊ฐ์ฒด์ ์ฐ๊ฒฐ
binding.gridview.adapter = ImageAdapter()
// ํญ๋ชฉ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋ ์ถ๊ฐ(ํด๋ฆญ๋๋ฉด์ ์ฝ๋ฐฑ ๊ฐ์ผ๋ก parent, view, position, id๊ฐ ๋์ด์จ๋ค. ์ฌ๊ธฐ์ position๋ง ์ผ์ง๋ง, view๋ฅผ ์ด๋ค๋ฉด ๋ด๊ฐ ์ ํํ view๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.)
binding.gridview.setOnItemClickListener { parent, view, position, id ->
Toast.makeText(this@MainActivity,"" + (position + 1) + "๋ฒ์งธ ์ ํ", Toast.LENGTH_SHORT).show()
}
}
}
์คํ ๊ฒฐ๊ณผ