Adapter 的四种创建方式
2019-03-27 本文已影响0人
ZYiDa
/**
* Adapter的四种创建方式
* ArrayAdapter 简单易用的Adapter,通常用于将数组或List集合的多个值包装成多个列表项
* SimpleAdapter 并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项
* SimpleCursorAdapter 与SimpleAdapter基本相似,只是用于包装Cursor提供的数据
* BaseAdapter 通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制
* */
第一种:ArrayAdapter
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list = findViewById<ListView>(R.id.list1)
/**
* 使用ArrayAdapter来创建
* */
val arr1 = arrayOf("鲁班七号","妲己","王者荣耀大傻逼","渣男开大G","渣女蹦野迪","渣男锡纸烫","渣女大波浪")
/**
* 第一个参数 Context 它代表访问整个Android应用的接口
* 第二个参数 textViewResourceId 自定义列表项组件的资源ID
* 第三个参数 该数组或List将负责为多个列表项提供数据源
* */
val adapter = ArrayAdapter(this,R.layout.array_adapter_cell,arr1)
list.adapter = adapter;
}
}
第二种:SimpleAdapter
class MainActivity : AppCompatActivity() {
private val names = arrayOf("鲁班七号","妲己","后羿","加特林","厄加特")
private val desc = arrayOf("小短腿","中路法师","下路射手","超级丑的LOL英雄","射速很快的机枪")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list = findViewById<ListView>(R.id.list1)
//使用SimpleAdapter
val listItems = ArrayList<Map<String,Any>>()
for (i in names.indices){
val item = HashMap<String,Any>()
item["username"] = names[i]
item["userdescription"] = desc[i]
listItems.add(item)
}
val keyArray = arrayOf("username","userdescription")
val itemIdArray = intArrayOf(R.id.username,R.id.userdescription)
/**
* 第一个参数 this
* 第二个参数 List<? extends Map<String, ?>> data 每个对象生成一个列表项
* 第三个参数 列表项组件的布局Id
* 第四个参数 列表项组件各个子组件所需 value对应的 key 的数组
* 第五个参数 列表项所需填充子组件的Id数组
* */
val simpleAdapter = SimpleAdapter(this,
listItems,
R.layout.simple_adapter_cell,
keyArray,
itemIdArray)
list.adapter = simpleAdapter
}
}
3.扩展BaseAdapter
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list = findViewById<ListView>(R.id.myList)
//扩展BaseAdapter
val adapter = object : BaseAdapter(){
//指定一共包含多少个选项
override fun getCount(): Int {
return 40
}
//该方法的返回值决定第position处的列表项内容
override fun getItem(position: Int): Any {
return Any()
}
//返回值决定着第position处列表项的ID
override fun getItemId(position: Int): Long {
return position.toLong()
}
//返回值决定第position处的列表项的组件
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val linearLayout = LinearLayout(this@MainActivity)
linearLayout.orientation = LinearLayout.HORIZONTAL
linearLayout.setBackgroundColor(Color.RED)
val image = ImageView(this@MainActivity)
image.setImageResource(R.mipmap.ic_launcher_round)
linearLayout.addView(image)
val textView = TextView(this@MainActivity)
textView.text = "第 $position 处的内容"
textView.textSize = 16f
textView.setTextColor(Color.BLUE)
linearLayout.addView(textView)
return linearLayout
}
}
}
}