diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-26 01:22:54 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-26 01:27:02 +0900 |
commit | 7ae78f41164b0333106945dcd611d039646f48e7 (patch) | |
tree | 12d7bd09af4f673e82a42acc640e02a1f5994f30 /app/src/main/java/net/lacolaco/smileessence/activity | |
parent | 40103f06c8e2798aad8f93c4da1d1b9aea0825f7 (diff) | |
download | SmileEssence-7ae78f41164b0333106945dcd611d039646f48e7.tar.gz |
de-listview
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/activity')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt | 61 | ||||
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt | 37 |
2 files changed, 77 insertions, 21 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt index 506178ad..265652a0 100644 --- a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt +++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt @@ -6,13 +6,72 @@ import android.support.v7.app.AppCompatActivity import android.text.TextUtils import android.view.* import android.widget.AbsListView +import android.widget.BaseAdapter import android.widget.ListView import kotlinx.android.synthetic.main.layout_edit_list.* import kotlinx.android.synthetic.main.list_item_simple_text.view.* import kotlinx.android.synthetic.main.part_edittext.view.* import net.lacolaco.smileessence.R import net.lacolaco.smileessence.data.ExtractionWord -import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter +import net.lacolaco.smileessence.util.UIHandler +import java.util.* + +abstract class CustomListAdapter<out T> : BaseAdapter() { + private var isNotifiable = true + private var frozenList: List<T> = ArrayList() + + fun setNotifiable(notifiable: Boolean) { + isNotifiable = notifiable + } + + override fun getCount(): Int { + return frozenList.size + } + + override fun getItem(position: Int): T { + return frozenList[position] + } + + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun notifyDataSetChanged() { + frozenList = Collections.unmodifiableList(list) + super.notifyDataSetChanged() + } + + protected abstract val list: List<T> + + fun update() { + if (isNotifiable) { + updateForce() + } + } + + fun updateForce() { + UIHandler().post { this.notifyDataSetChanged() } + } +} + + +abstract class UnorderedCustomListAdapter<T> constructor(override val list: ArrayList<T> = ArrayList()) : CustomListAdapter<T>() { + init { + update() + } + + @Synchronized + fun add(item: T) = list.add(item) + + @Synchronized + fun addAll(items: Collection<T>) = list.addAll(items) + + @Synchronized + fun clear() = list.clear() + + @Synchronized + fun remove(item: T): Boolean = list.remove(item) +} class EditExtractionActivity : AppCompatActivity() { private val adapter by lazy { diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt index 75560f40..11019e72 100644 --- a/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt +++ b/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt @@ -20,7 +20,7 @@ class ManagePagesActivity : AppCompatActivity() { private val world by lazy { World[intent.getLongExtra(INTENT_KEY_WORLD_ID, -1)] } - private lateinit var pages: MutableList<PageInfo> + private var changed = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -28,16 +28,14 @@ class ManagePagesActivity : AppCompatActivity() { setContentView(R.layout.activity_page_manage) setSupportActionBar(toolbar) - pages = PageInfo.parseList(if (savedInstanceState == null) - PageInfo.stringifyList(world.pages) - else - savedInstanceState.getString(KEY_SAVED_PAGES) - ).toMutableList() + if (savedInstanceState != null) + changed = savedInstanceState.getBoolean(KEY_IS_CHANGED) fab.setOnClickListener { + changed = true val item = PageInfo.TweetsPageInfo("Tweets", listOf()) - pages.add(item) - recycler_view.adapter.notifyItemInserted(pages.size - 1) + world.pages.add(item) + recycler_view.adapter.notifyItemInserted(world.pages.size - 1) openItemEditor(item) } val helper = ItemTouchHelper(object : ItemTouchHelper.Callback() { @@ -66,15 +64,12 @@ class ManagePagesActivity : AppCompatActivity() { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putString(KEY_SAVED_PAGES, PageInfo.stringifyList(pages)) + outState.putBoolean(KEY_IS_CHANGED, changed) } override fun finish() { // MainActivity will restart itself on RESULT_OK - if (PageInfo.stringifyList(world.pages) == PageInfo.stringifyList(pages)) - setResult(RESULT_CANCELED) - else - setResult(RESULT_OK) + setResult(if (changed) RESULT_OK else RESULT_CANCELED) super.finish() } @@ -84,12 +79,12 @@ class ManagePagesActivity : AppCompatActivity() { companion object { val INTENT_KEY_WORLD_ID = "WORLD_ID" - private val KEY_SAVED_PAGES = "SAVED_PAGES" + private val KEY_IS_CHANGED = "IS_CHANGED" } private inner class PagesAdapter : RecyclerView.Adapter<PagesAdapter.ViewHolder>() { override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val item = pages[position] + val item = world.pages[position] val view = holder.itemView view.page_kind_text_view.text = item.name view.page_name_text_view.text = item.describe() @@ -101,7 +96,7 @@ class ManagePagesActivity : AppCompatActivity() { } override fun getItemCount(): Int { - return pages.size + return world.pages.size } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { @@ -109,16 +104,18 @@ class ManagePagesActivity : AppCompatActivity() { } fun move(before: Int, after: Int): Boolean { - val item = pages.removeAt(before) - pages.add(after, item) + changed = true + val item = world.pages.removeAt(before) + world.pages.add(after, item) notifyItemMoved(before, after) return true } fun remove(position: Int) { - pages.removeAt(position) + changed = true + world.pages.removeAt(position) notifyItemRemoved(position) - notifyItemRangeChanged(position, pages.size) + notifyItemRangeChanged(position, world.pages.size) } private inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) |