mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-02-07 14:03:27 +01:00
allow adding section headers to the list
This commit is contained in:
parent
f5e0bf81d7
commit
3f267ba8ed
@ -5,12 +5,18 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.BaseAdapter
|
||||
import android.widget.TextView
|
||||
import com.simplemobiletools.calendar.Formatter
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.models.Event
|
||||
import com.simplemobiletools.calendar.models.ListEvent
|
||||
import com.simplemobiletools.calendar.models.ListItem
|
||||
import com.simplemobiletools.calendar.models.ListSection
|
||||
import kotlinx.android.synthetic.main.event_item.view.*
|
||||
|
||||
class EventsListAdapter(context: Context, private val mEvents: List<Event>) : BaseAdapter() {
|
||||
class EventsListAdapter(context: Context, private val mEvents: List<ListItem>) : BaseAdapter() {
|
||||
val ITEM_EVENT = 0
|
||||
val ITEM_HEADER = 1
|
||||
|
||||
private val mInflater: LayoutInflater
|
||||
|
||||
init {
|
||||
@ -20,30 +26,50 @@ class EventsListAdapter(context: Context, private val mEvents: List<Event>) : Ba
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
var view = convertView
|
||||
val viewHolder: ViewHolder
|
||||
val type = getItemViewType(position)
|
||||
|
||||
if (view == null) {
|
||||
view = mInflater.inflate(R.layout.event_item, parent, false)
|
||||
viewHolder = ViewHolder(view)
|
||||
if (type == ITEM_EVENT) {
|
||||
view = mInflater.inflate(R.layout.event_item, parent, false)
|
||||
viewHolder = ViewHolder(view)
|
||||
} else {
|
||||
view = mInflater.inflate(R.layout.event_section, parent, false)
|
||||
viewHolder = ViewHolder(view)
|
||||
}
|
||||
view!!.tag = viewHolder
|
||||
} else {
|
||||
viewHolder = view.tag as ViewHolder
|
||||
}
|
||||
|
||||
val event = mEvents[position]
|
||||
viewHolder.apply {
|
||||
title.text = event.title
|
||||
description.text = event.description
|
||||
start.text = Formatter.getTime(event.startTS)
|
||||
if (type == ITEM_EVENT) {
|
||||
val item = mEvents[position] as ListEvent
|
||||
viewHolder.apply {
|
||||
title.text = item.title
|
||||
description?.text = item.description
|
||||
start?.text = Formatter.getTime(item.startTS)
|
||||
|
||||
if (event.startTS == event.endTS) {
|
||||
end.visibility = View.INVISIBLE
|
||||
} else {
|
||||
end.text = Formatter.getTime(event.endTS)
|
||||
if (item.startTS == item.endTS) {
|
||||
end?.visibility = View.INVISIBLE
|
||||
} else {
|
||||
end?.text = Formatter.getTime(item.endTS)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
val item = mEvents[position] as ListSection
|
||||
viewHolder.title.text = item.title
|
||||
}
|
||||
|
||||
return view
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return if (mEvents[position] is ListEvent) ITEM_EVENT else ITEM_HEADER
|
||||
}
|
||||
|
||||
override fun getViewTypeCount(): Int {
|
||||
return 2
|
||||
}
|
||||
|
||||
override fun getCount(): Int {
|
||||
return mEvents.size
|
||||
}
|
||||
@ -53,13 +79,13 @@ class EventsListAdapter(context: Context, private val mEvents: List<Event>) : Ba
|
||||
}
|
||||
|
||||
override fun getItemId(position: Int): Long {
|
||||
return 0
|
||||
return position.toLong()
|
||||
}
|
||||
|
||||
class ViewHolder(view: View) {
|
||||
val title = view.event_item_title
|
||||
val description = view.event_item_description
|
||||
val start = view.event_item_start
|
||||
val end = view.event_item_end
|
||||
val description: TextView? = view.event_item_description
|
||||
val start: TextView? = view.event_item_start
|
||||
val end: TextView? = view.event_item_end
|
||||
}
|
||||
}
|
||||
|
@ -7,10 +7,14 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.simplemobiletools.calendar.DBHelper
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.adapters.EventsAdapter
|
||||
import com.simplemobiletools.calendar.adapters.EventsListAdapter
|
||||
import com.simplemobiletools.calendar.models.Event
|
||||
import com.simplemobiletools.calendar.models.ListEvent
|
||||
import com.simplemobiletools.calendar.models.ListItem
|
||||
import kotlinx.android.synthetic.main.fragment_event_list.view.*
|
||||
import org.joda.time.DateTime
|
||||
import java.util.*
|
||||
import kotlin.comparisons.compareBy
|
||||
|
||||
class EventListFragment : Fragment(), DBHelper.GetEventsListener {
|
||||
lateinit var mView: View
|
||||
@ -28,7 +32,11 @@ class EventListFragment : Fragment(), DBHelper.GetEventsListener {
|
||||
}
|
||||
|
||||
override fun gotEvents(events: MutableList<Event>) {
|
||||
val eventsAdapter = EventsAdapter(context, events)
|
||||
val listItems = ArrayList<ListItem>(events.size)
|
||||
val sorted = events.sortedWith(compareBy({ it.startTS }, { it.endTS }))
|
||||
sorted.forEach { listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description)) }
|
||||
|
||||
val eventsAdapter = EventsListAdapter(context, listItems)
|
||||
activity?.runOnUiThread {
|
||||
mView.calendar_events_list.adapter = eventsAdapter
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.simplemobiletools.calendar.models
|
||||
|
||||
class ListEvent(var id: Int = 0, var startTS: Int = 0, var endTS: Int = 0, var title: String = "", var description: String = "") : ListItem() {
|
||||
override fun toString(): String {
|
||||
return "Event {id=$id, startTS=$startTS, endTS=$endTS, title=$title, description=$description}"
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
package com.simplemobiletools.calendar.models
|
||||
|
||||
open class ListItem
|
@ -0,0 +1,7 @@
|
||||
package com.simplemobiletools.calendar.models
|
||||
|
||||
class ListSection(val title: String, val isToday: Boolean) : ListItem() {
|
||||
override fun toString(): String {
|
||||
return "ListSection {title=$title, isToday=$isToday}"
|
||||
}
|
||||
}
|
7
app/src/main/res/layout/event_section.xml
Normal file
7
app/src/main/res/layout/event_section.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/event_item_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/day_text_size"/>
|
Loading…
x
Reference in New Issue
Block a user