diff --git a/app/src/main/java/keijumt/recyclerview/databinding/Item.kt b/app/src/main/java/keijumt/recyclerview/databinding/Item.kt new file mode 100644 index 0000000..3698fdc --- /dev/null +++ b/app/src/main/java/keijumt/recyclerview/databinding/Item.kt @@ -0,0 +1,5 @@ +package keijumt.recyclerview.databinding + +data class Item( + val name: String +) \ No newline at end of file diff --git a/app/src/main/java/keijumt/recyclerview/ui/main/MainAdapter.kt b/app/src/main/java/keijumt/recyclerview/ui/main/MainAdapter.kt new file mode 100644 index 0000000..95fb282 --- /dev/null +++ b/app/src/main/java/keijumt/recyclerview/ui/main/MainAdapter.kt @@ -0,0 +1,55 @@ +package keijumt.recyclerview.ui.main + +import android.databinding.DataBindingUtil +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.ViewGroup +import keijumt.recyclerview.R +import keijumt.recyclerview.databinding.Item +import keijumt.recyclerview.databinding.ItemBinding + +class MainAdapter(private val listener: Listener) : RecyclerView.Adapter() { + + private val itemList = mutableListOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.item, parent, false) + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(position) + } + + override fun getItemCount(): Int { + return itemList.size + } + + fun addItems(items: List) { + itemList.addAll(items) + notifyDataSetChanged() + } + + fun remove(position: Int) { + itemList.removeAt(position) + notifyItemRemoved(position) + notifyItemRangeChanged(position, itemList.size - 1) + } + + inner class ViewHolder(private val binding: ItemBinding) : RecyclerView.ViewHolder(binding.root) { + fun bind(itemPosition: Int) { + binding.apply { + item = itemList.get(itemPosition) + position = itemPosition.toString() + } + binding.itemContainer.setOnLongClickListener { + listener.onLongClickItem(itemList.get(itemPosition), itemPosition) + true + } + } + } + + interface Listener { + fun onLongClickItem(item: Item, position: Int) + } +} \ No newline at end of file diff --git a/app/src/main/java/keijumt/recyclerview/ui/main/MainFragment.kt b/app/src/main/java/keijumt/recyclerview/ui/main/MainFragment.kt index 29ad3c7..42bac92 100644 --- a/app/src/main/java/keijumt/recyclerview/ui/main/MainFragment.kt +++ b/app/src/main/java/keijumt/recyclerview/ui/main/MainFragment.kt @@ -3,12 +3,19 @@ import android.arch.lifecycle.ViewModelProviders import android.os.Bundle import android.support.v4.app.Fragment +import android.support.v7.app.AlertDialog +import android.support.v7.widget.DividerItemDecoration +import android.support.v7.widget.LinearLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import keijumt.recyclerview.R +import keijumt.recyclerview.databinding.Item +import kotlinx.android.synthetic.main.main_fragment.view.* -class MainFragment : Fragment() { +class MainFragment : Fragment(), MainAdapter.Listener { + + private lateinit var adapter: MainAdapter companion object { fun newInstance() = MainFragment() @@ -18,13 +25,38 @@ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - return inflater.inflate(R.layout.main_fragment, container, false) + val view = inflater.inflate(R.layout.main_fragment, container, false) + adapter = MainAdapter(this) + view.recycler_main.also { + it.layoutManager = LinearLayoutManager(this.context) + it.addItemDecoration(DividerItemDecoration(this.context, LinearLayoutManager(this.context).orientation)) + it.adapter = adapter + } + + return view } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) - // TODO: Use the ViewModel + + val items = mutableListOf() + for (i in 0 until 10) { + val item = Item("name") + items.add(item) + } + adapter.addItems(items) } + override fun onLongClickItem(item: Item, position: Int) { + AlertDialog.Builder(activity!!) + .setTitle("削除") + .setMessage("削除しますか?") + .setPositiveButton("はい", { _, _ -> + adapter.remove(position) + }) + .setNegativeButton("いいえ", { _, _ -> + + }).show() + } } diff --git a/app/src/main/res/layout/item.xml b/app/src/main/res/layout/item.xml new file mode 100644 index 0000000..26142db --- /dev/null +++ b/app/src/main/res/layout/item.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_fragment.xml b/app/src/main/res/layout/main_fragment.xml index e94006e..cdc9d6d 100644 --- a/app/src/main/res/layout/main_fragment.xml +++ b/app/src/main/res/layout/main_fragment.xml @@ -1,20 +1,14 @@ - +