2018-01-04 19:52:25 +01:00
|
|
|
package jp.juggler.subwaytooter
|
|
|
|
|
|
|
|
import android.support.v4.view.PagerAdapter
|
|
|
|
import android.util.SparseArray
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
2018-11-15 23:08:11 +01:00
|
|
|
import jp.juggler.subwaytooter.util.Benchmark
|
2018-12-01 00:02:18 +01:00
|
|
|
import jp.juggler.util.LogCategory
|
2018-11-15 23:08:11 +01:00
|
|
|
import java.util.*
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
internal class ColumnPagerAdapter(private val activity : ActMain) : PagerAdapter() {
|
2018-11-15 23:08:11 +01:00
|
|
|
|
|
|
|
companion object {
|
|
|
|
val log = LogCategory("ColumnPagerAdapter")
|
|
|
|
}
|
|
|
|
|
2018-01-04 19:52:25 +01:00
|
|
|
private val inflater : LayoutInflater
|
|
|
|
private val column_list : ArrayList<Column>
|
|
|
|
private val holder_list = SparseArray<ColumnViewHolder>()
|
|
|
|
|
|
|
|
init {
|
|
|
|
this.inflater = activity.layoutInflater
|
|
|
|
this.column_list = activity.app_state.column_list
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun getCount() : Int {
|
|
|
|
return column_list.size
|
|
|
|
}
|
|
|
|
|
|
|
|
fun getColumn(idx : Int) : Column? {
|
|
|
|
return if(idx >= 0 && idx < column_list.size) column_list[idx] else null
|
|
|
|
}
|
|
|
|
|
2018-02-04 18:55:42 +01:00
|
|
|
fun getColumnViewHolder(idx : Int) : ColumnViewHolder? {
|
2018-01-04 19:52:25 +01:00
|
|
|
return holder_list.get(idx)
|
|
|
|
}
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
override fun getPageTitle(page_idx : Int) : CharSequence? {
|
2018-11-15 23:08:11 +01:00
|
|
|
return getColumn(page_idx)?.getColumnName(false)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
override fun isViewFromObject(view : View, obj : Any) : Boolean {
|
|
|
|
return view === obj
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
2018-11-15 23:08:11 +01:00
|
|
|
private val viewCache = LinkedList<ColumnViewHolder>()
|
|
|
|
|
2018-01-04 19:52:25 +01:00
|
|
|
override fun instantiateItem(container : ViewGroup, page_idx : Int) : Any {
|
2018-11-15 23:08:11 +01:00
|
|
|
val viewRoot : View
|
|
|
|
val holder : ColumnViewHolder
|
|
|
|
if(viewCache.isNotEmpty()) {
|
|
|
|
val b = Benchmark(log, "instantiateItem: cached")
|
|
|
|
holder = viewCache.removeFirst()
|
|
|
|
viewRoot = holder.viewRoot
|
|
|
|
b.report()
|
|
|
|
} else {
|
|
|
|
val b = Benchmark(log, "instantiateItem: new")
|
|
|
|
viewRoot = inflater.inflate(R.layout.page_column, container, false)
|
|
|
|
holder = ColumnViewHolder(activity, viewRoot)
|
|
|
|
b.report()
|
|
|
|
}
|
|
|
|
container.addView(viewRoot, 0)
|
2018-01-04 19:52:25 +01:00
|
|
|
holder_list.put(page_idx, holder)
|
2018-11-15 23:08:11 +01:00
|
|
|
holder.onPageCreate(column_list[page_idx], page_idx, column_list.size)
|
|
|
|
return viewRoot
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
override fun destroyItem(container : ViewGroup, page_idx : Int, obj : Any) {
|
2018-01-04 19:52:25 +01:00
|
|
|
val holder = holder_list.get(page_idx)
|
|
|
|
holder_list.remove(page_idx)
|
2018-11-15 23:08:11 +01:00
|
|
|
if(holder != null) {
|
|
|
|
holder.onPageDestroy(page_idx)
|
|
|
|
container.removeView(holder.viewRoot)
|
|
|
|
viewCache.addLast(holder)
|
|
|
|
}
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
}
|