懒得每次写重复代码,打个模板好了,大家有更好的设计想法,欢迎告知~
import android.os.Bundle
import android.support.design.widget.BottomSheetDialogFragment
import android.support.v4.app.FragmentManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class BottomXXFragment : BottomSheetDialogFragment(),
XXListAdapter.ItemClickListener {
private var listener: ItemClickListener? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.frag_bottom_XX, container, false)
}
// 或者将listener放入newInstance里,给fragment对象赋值。
fun show(manager: FragmentManager?, listener: ItemClickListener) {
this.listener = listener
super.show(manager, javaClass.simpleName)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val list = arguments?.getSerializable(DATA_xx) as? List<xx>
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.itemAnimator = DefaultItemAnimator()
recyclerView.adapter = list?.let { xxListAdapter(it, this) }
}
override fun itemClick(item: xx) {
listener?.onItemClick(item)
dismiss()
}
companion object {
private const val DATA_THIRD = "third_list"
fun newInstance(list: List<XX>): BottomXXFragment {
return BottomXXFragment().apply {
arguments = Bundle().apply {
putSerializable(DATA_XX, list as? ArrayList)
}
}
}
}
interface ItemClickListener {
fun onItemClick(item: xx)
}
}
class XXListAdapter(
private val list: List<xx>,
private val listener: ItemClickListener
) : RecyclerView.Adapter<ThirdListAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(
R.layout.account_third_item,
parent,
false
)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (position == RecyclerView.NO_POSITION) return
val item = list[position]
holder.xxName.text = item.name
holder.itemView.setOnClickListener {
listener.itemClick(item)
}
}
override fun getItemCount() = list.size
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val accountName: TextView = itemView.findViewById(R.id.xx_name)
}
interface ItemClickListener {
fun itemClick(item: xx)
}
}
BottomXXSelect.newInstance().show(supportFragmentManager,
object : BottomXXSelect.ItemClickListener {
override fun onItemClick(xx: XX) {
}
})
网友评论