Android Kotlin和RxJava示例

示例

第一个示例在Kotlin中重新实现,并使用RxJava进行更清晰的交互。

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.support.v7.widget.RecyclerView
import rx.subjects.PublishSubject

public class SampleAdapter(private val items: Array<String>) : RecyclerView.Adapter<SampleAdapter.ViewHolder>() {

    // 从rx.subject更改为不同的主题以获得不同的行为
    // 例如,BehaviorSubject允许在订阅时接收上一个事件
    // 另一方面,PublishSubject仅在订阅后才发送事件,这对于点击是理想的
    public val itemClickStream: PublishSubject<View> = PublishSubject.create()
    
    override fun getItemCount(): Int {
        return items.size
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder? {
        val v = LayoutInflater.from(parent.getContext()).inflate(R.layout.text_row_item, parent, false);
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(items[position])
    }

    public inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        private val textView: TextView by lazy { view.findViewById(R.id.textView) as TextView }

        init {
           view.setOnClickListener{ v -> itemClickStream.onNext(v) }
        }

        fun bind(text: String) {
           textView.text= text
        }
    }
}

用法很简单。使用RxJava工具可以在单独的线程上进行订阅。

val adapter = SampleAdapter(arrayOf("Hello", "World"))
adapter.itemClickStream.subscribe { v ->
    if (v.id == R.id.textView) {
        // 做点什么
    }
}