Skip to content

Instantly share code, notes, and snippets.

@dschinkel
Created March 11, 2019 14:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dschinkel/e50aee7b00e30f3c172337d3b77c42e3 to your computer and use it in GitHub Desktop.
Save dschinkel/e50aee7b00e30f3c172337d3b77c42e3 to your computer and use it in GitHub Desktop.
Android Remove Item Spike
package com.kata.skunkworks
data class SkunkWork(val title: String)
package com.kata.skunkworks
class SkunkWorkInteractor(val skunkworkRepo: SkunkWorkRepository) {
fun findAllSkunkWork(): MutableList<SkunkWork> {
return skunkworkRepo.findAllSkunkWorks()
}
fun addSkunkWork(title: String) {
skunkworkRepo.addSkunkWork(SkunkWork(title))
}
fun deleteSkunkWork(id: Int) {
skunkworkRepo.deleteSkunkWork(id)
}
}
package com.kata.skunkworks
import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.skunk_work_list_item.view.*
class SkunkWorkListAdapter(val appContext: Context, var skunkWorkList: MutableList<SkunkWork>) : RecyclerView.Adapter<SkunkWorkListAdapter.SkunkWorkListItem>() {
override fun onCreateViewHolder(parent: ViewGroup, position: Int): SkunkWorkListItem {
return SkunkWorkListItem(
LayoutInflater.from(parent.context).inflate(
R.layout.skunk_work_list_item,
parent,
false
)
)
}
override fun getItemCount(): Int {
return skunkWorkList.size
}
fun delete(position: Int) {
this.skunkWorkList.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, getItemCount() - position)
}
override fun onBindViewHolder(skunkWorkListItem: SkunkWorkListItem, position: Int) {
skunkWorkListItem.bindTitle(skunkWorkList[position].title)
skunkWorkListItem.deleteSkunkWork(position, this)
}
class SkunkWorkListItem(private val skunkwork: View) : RecyclerView.ViewHolder(skunkwork) {
fun bindTitle(title: String) {
skunkwork.skunk_work_title.text = title
}
fun deleteSkunkWork(position: Int, adapter: SkunkWorkListAdapter) {
skunkwork.remove_skunkwork.setOnClickListener {
val interactor = SkunkWorkInteractor(SkunkWorkRepository(adapter.appContext))
interactor.deleteSkunkWork(position)
adapter.delete(position)
}
}
}
}
package com.kata.skunkworks
import android.content.Context
import android.content.SharedPreferences
class SkunkWorkRepository(appContext: Context) {
private val defaultString = """
Can Beam,Mini Drone Forge Tour Guide,Smart Light That Goes Red When Build Fails,NFC Chip That Gives Wifi Access,
NFC Ventra Clothing,Train Set,Nap Pods,DX War Room,Greeting Robot That Recognizes You Based On Key Card,
Cool Light For When Creative Collision is Ready,Interactive Room Reservation System,Custom Magnet All The Things,
Amiibo Features Around Features Around The Office,Card Wall With NFC Chips
""".trimIndent().replace("\n", "")
private val sharedPrefs = appContext.getSharedPreferences("com.kata.skunkworks", Context.MODE_PRIVATE)
fun findAllSkunkWorks(): MutableList<SkunkWork> {
val skunkWorksString: String = sharedPrefs.getString("skunkworksList", defaultString) ?: defaultString
return skunkWorksString.split(",").map(::SkunkWork).toMutableList()
}
fun addSkunkWork(skunkWork: SkunkWork) {
val editor: SharedPreferences.Editor = sharedPrefs.edit()
val skunkWorks: MutableList<SkunkWork> = findAllSkunkWorks().toMutableList()
skunkWorks.add(skunkWork)
editor.remove("skunkworksList")
editor.apply()
editor.putString("skunkworksList", skunkWorks.map(SkunkWork::title).joinToString(","))
editor.apply()
}
fun deleteSkunkWork(id: Int) {
val editor: SharedPreferences.Editor = sharedPrefs.edit()
val skunkWorks: MutableList<SkunkWork> = findAllSkunkWorks().toMutableList()
skunkWorks.removeAt(id)
editor.remove("skunkworksList")
editor.apply()
editor.putString("skunkworksList", skunkWorks.map(SkunkWork::title).joinToString(","))
editor.apply()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment