Adapter 的四种创建方式

/**
 * 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
            }
        }
    }
}

推荐阅读更多精彩内容