diff --git a/app/src/main/kotlin/jackall/moncalc/adapter/HistoryRecyclerAdapter.kt b/app/src/main/kotlin/jackall/moncalc/adapter/HistoryRecyclerAdapter.kt new file mode 100644 index 0000000..c92c058 --- /dev/null +++ b/app/src/main/kotlin/jackall/moncalc/adapter/HistoryRecyclerAdapter.kt @@ -0,0 +1,56 @@ +package jackall.moncalc.adapter + +import android.content.Context +import android.databinding.DataBindingUtil +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import jackall.moncalc.R +import jackall.moncalc.databinding.HistoryListItemBinding +import jackall.moncalc.viewmodel.HistoryItemViewModel +import jackall.moncalc.vo.HistoryItem + +/** + * Created by matsumoto_k on 2017/11/03. + */ +class HistoryRecyclerAdapter(var context: Context) : RecyclerView.Adapter() { + + var items: ArrayList = ArrayList() + + inner class ViewHolder(itemView: View, viewModel: HistoryItemViewModel) : RecyclerView.ViewHolder(itemView) { + var viewModel: HistoryItemViewModel? = null + + init { + this.viewModel = viewModel + } + + fun loadItem(item: HistoryItem) { + viewModel?.loadItem(item) + } + } + + fun setItemAndRefresh(items: ArrayList) { + this.items = items + notifyDataSetChanged() + } + + fun getItemAt(position: Int): HistoryItem { + return items.get(position) + } + + override fun onBindViewHolder(holder: ViewHolder?, position: Int) { + val item = getItemAt(position) + holder?.loadItem(item) + } + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { + val binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.history_list_item, parent, false) + binding.historyItemViewModel = HistoryItemViewModel() + return ViewHolder(binding.root, binding.historyItemViewModel!!) + } + + override fun getItemCount(): Int { + return items.size + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/jackall/moncalc/fragment/HistoryFragment.kt b/app/src/main/kotlin/jackall/moncalc/fragment/HistoryFragment.kt index 50a7df8..958d79c 100644 --- a/app/src/main/kotlin/jackall/moncalc/fragment/HistoryFragment.kt +++ b/app/src/main/kotlin/jackall/moncalc/fragment/HistoryFragment.kt @@ -4,18 +4,24 @@ import android.databinding.DataBindingUtil import android.os.Bundle import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import jackall.moncalc.R +import jackall.moncalc.adapter.HistoryRecyclerAdapter import jackall.moncalc.databinding.FragmentHistoryBinding +import kotlinx.android.synthetic.main.fragment_history.view.* /** * Created by matsumoto_k on 2017/11/03. */ class HistoryFragment : Fragment() { lateinit var binding: FragmentHistoryBinding - val historyViewModel by lazy { ViewModelProviders.of(this, HistoryViewModel.Factory()).get(HistoryViewModel::class.java) } + val historyViewModel by lazy { ViewModelProviders.of(this, HistoryViewModel.Factory(adapter)).get(HistoryViewModel::class.java) } + val adapter by lazy { HistoryRecyclerAdapter(activity) } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } @@ -24,6 +30,13 @@ binding = DataBindingUtil.inflate(layoutInflater, R.layout.fragment_history, container, false) binding.historyViewModel = historyViewModel lifecycle.addObserver(historyViewModel) + + binding.root.history_recycler_view.setHasFixedSize(true) + binding.root.history_recycler_view.layoutManager = LinearLayoutManager(activity) + (binding.root.history_recycler_view.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false + binding.root.history_recycler_view.adapter = adapter return binding.root } + + } \ No newline at end of file diff --git a/app/src/main/kotlin/jackall/moncalc/fragment/HistoryViewModel.kt b/app/src/main/kotlin/jackall/moncalc/fragment/HistoryViewModel.kt index 97b53b6..81a0bba 100644 --- a/app/src/main/kotlin/jackall/moncalc/fragment/HistoryViewModel.kt +++ b/app/src/main/kotlin/jackall/moncalc/fragment/HistoryViewModel.kt @@ -2,15 +2,54 @@ import android.arch.lifecycle.ViewModel import android.arch.lifecycle.ViewModelProvider +import android.databinding.ObservableBoolean +import jackall.moncalc.adapter.HistoryRecyclerAdapter +import jackall.moncalc.db.MonstDataRealmHelper +import jackall.moncalc.db.QuestRecordRealmHelper import jackall.moncalc.viewmodel.LifecycleViewModel +import jackall.moncalc.vo.Fruit +import jackall.moncalc.vo.Grade +import jackall.moncalc.vo.HistoryItem +import jackall.moncalc.vo.Temple /** * Created by matsumoto_k on 2017/11/03. */ -class HistoryViewModel : LifecycleViewModel() { - class Factory() : ViewModelProvider.NewInstanceFactory() { +class HistoryViewModel(val adapter: HistoryRecyclerAdapter) : LifecycleViewModel() { + + val questRealmHelper = QuestRecordRealmHelper() + val monstDataRealmHelper = MonstDataRealmHelper() + val refreshLayoutLoading = ObservableBoolean(true) + val hisotoryItems = ArrayList() + + init { + onRefresh() + } + + fun onRefresh() { + refreshLayoutLoading.set(true) + hisotoryItems.clear() + questRealmHelper.findAll().sortedByDescending { it.createAt }.forEach { + hisotoryItems.add( + HistoryItem(templeName = monstDataRealmHelper.findNameById(Temple::class.java, it.templeId), + fruitName = monstDataRealmHelper.findNameById(Fruit::class.java, it.fruitId), + gradeName = monstDataRealmHelper.findNameById(Grade::class.java, it.gradeId), + createAt = it.createAt) + ) + } + adapter.setItemAndRefresh(hisotoryItems) + refreshLayoutLoading.set(false) + } + + override fun onDestroy() { + super.onDestroy() + monstDataRealmHelper.close() + questRealmHelper.close() + } + + class Factory(val adapter: HistoryRecyclerAdapter) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { - return HistoryViewModel() as T + return HistoryViewModel(adapter) as T } } } \ No newline at end of file diff --git a/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryItemViewModel.kt b/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryItemViewModel.kt new file mode 100644 index 0000000..996a0e2 --- /dev/null +++ b/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryItemViewModel.kt @@ -0,0 +1,22 @@ +package jackall.moncalc.viewmodel + +import android.databinding.ObservableField +import android.text.format.DateFormat +import jackall.moncalc.vo.HistoryItem + +/** + * Created by matsumoto_k on 2017/11/03. + */ +class HistoryItemViewModel { + val templeName = ObservableField() + val fruitName = ObservableField() + val gradeName = ObservableField() + val createAt = ObservableField() + + fun loadItem(item: HistoryItem) { + templeName.set(item.templeName) + fruitName.set(item.fruitName) + gradeName.set(item.gradeName) + createAt.set(DateFormat.format("yyyy/MM/dd kk:mm:ss", item.createAt).toString()) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/jackall/moncalc/vo/HistoryItem.kt b/app/src/main/kotlin/jackall/moncalc/vo/HistoryItem.kt new file mode 100644 index 0000000..3dc9ea0 --- /dev/null +++ b/app/src/main/kotlin/jackall/moncalc/vo/HistoryItem.kt @@ -0,0 +1,15 @@ +package jackall.moncalc.vo + +import java.util.* + +/** + * 履歴リストのアイテム + * + * Created by matsumoto_k on 2017/11/03. + */ +data class HistoryItem( + val templeName: String = "", + val fruitName: String = "", + val gradeName: String = "", + val createAt: Date = Date() +) \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_history.xml b/app/src/main/res/layout/fragment_history.xml index e749cdb..369560a 100644 --- a/app/src/main/res/layout/fragment_history.xml +++ b/app/src/main/res/layout/fragment_history.xml @@ -1,5 +1,6 @@ - + @@ -12,5 +13,16 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/history_list_item.xml b/app/src/main/res/layout/history_list_item.xml new file mode 100644 index 0000000..4734040 --- /dev/null +++ b/app/src/main/res/layout/history_list_item.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1c4f186..09813db 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,4 +3,6 @@ #3F51B5 #000000 #000000 + + #000000