[databinding]RecyclerView+databinding+kotlin

hustpzb 2018-03-02

一.数据:

User:

class User {

    var firstname: ObservableField<String> = ObservableField()
    var lastname: ObservableField<String> = ObservableField()
    var isAdult: ObservableBoolean = ObservableBoolean()
    var displayName: ObservableField<String> = ObservableField()
    var age: ObservableField<Int> = ObservableField()

}

二.item view:

recycler_view_item.xml:

<layout>
    <data>
        <variable name="user"
            type="com.m.databindingdemo.model.User"/>
    </data>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginBottom="10dp"
        android:background="@android:color/darker_gray"
        android:gravity="center_vertical"
        android:orientation="vertical">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstname}"/>
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(user.age)}"/>
    </LinearLayout>
</layout>

三.Adapter:

class RecyclerViewAdapter(private var userList: MutableList<User>) : RecyclerView.Adapter<RecyclerViewAdapter.TestViewHolder>() {

    override fun getItemCount(): Int  = userList.size

    override fun onBindViewHolder(holder: TestViewHolder?, position: Int) {
        holder?.bind(userList[position])
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): TestViewHolder {
        val binding = DataBindingUtil.inflate<RecyclerViewItemBinding>(
                LayoutInflater.from(parent?.context),
                R.layout.recycler_view_item,
                parent,
                false
        )
        return TestViewHolder(binding)
    }


    class TestViewHolder(private val binding: RecyclerViewItemBinding) 
                   : ViewHolder(binding.root) {
        fun bind(data: User) {
              //方法一:
//            binding.setVariable(BR.user,data)
            //方法二:
            binding.user = data
            binding.executePendingBindings()
        }
    }
}

四.Activity:

class RecycleViewActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_recycle_view)

        val layoutManager = LinearLayoutManager(this)
        recycler_view.layoutManager = layoutManager
        recycler_view.adapter = RecyclerViewAdapter(initUsers())

    }

    private fun initUsers() : MutableList<User>{
        val userList = mutableListOf<User>()
        for (i in 1..5) {
            var user = User()
            user.firstname.set("name $i")
            user.age.set(i)
            userList.add(user)
        }
        return userList
    }
}

参考:

1.java+RecyclerView:https://www.cnblogs.com/DoNetCoder/p/7243878.html?utm_source=tuicool&utm_medium=referral

2.kotlin+RecyclerView:https://github.com/JetBrains/kotlin-examples/blob/master/gradle/android-databinding/app/src/main/java/org/example/kotlin/databinding/OtherActivity.kt

相关推荐