Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DiffAdapter(private val item: Item) :
- ListAdapter<Pair<String, Double>, DiffViewHolder>(MyDiff()) {
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = DiffViewHolder(
- LayoutInflater.from(parent.context).inflate(R.layout.item_converter, parent, false)
- )
- override fun onBindViewHolder(holder: DiffViewHolder, position: Int) {
- val measure = item.measures[position]
- holder.onBind(measure.first, item.value * measure.second, object : TextWatcher {
- override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
- }
- override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
- item.value = s.toString().toDouble() / measure.second
- holder.itemView.post { notifyDataSetChanged() }
- }
- override fun afterTextChanged(s: Editable?) {
- }
- }) { v, hasFocus ->
- if (hasFocus) {
- item.measures.add(0, item.measures.removeAt(position))
- notifyItemMoved(position, 0)
- }
- }
- }
- override fun getItemCount(): Int {
- return item.measures.size
- }
- }
- class DiffViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- val labelTv: TextView = itemView.findViewById(R.id.label_tv)
- val measureEdit: EditText = itemView.findViewById(R.id.measure_edit)
- fun onBind(
- label: String,
- currentValue: Double,
- watcher: TextWatcher,
- listener: View.OnFocusChangeListener
- ) {
- labelTv.text = label
- measureEdit.setText(currentValue.toString())
- measureEdit.addTextChangedListener(watcher)
- measureEdit.onFocusChangeListener = listener
- }
- }
- class MyDiff : DiffUtil.ItemCallback<Pair<String, Double>>() {
- override fun areItemsTheSame(
- oldItem: Pair<String, Double>,
- newItem: Pair<String, Double>
- ): Boolean {
- return oldItem.first == newItem.first
- }
- override fun areContentsTheSame(
- oldItem: Pair<String, Double>,
- newItem: Pair<String, Double>
- ): Boolean {
- return oldItem.first == newItem.first && oldItem.second == newItem.second
- }
- }
Add Comment
Please, Sign In to add comment