Я пытаюсь создать браузер для Android, поэтому для этого я подумал, что использование viewpager
с FragmentStatePagerAdapter
- хорошая идея. Но однажды я удалил одну вкладку и добавил новую, возвращающую старый фрагмент, но я хочу новую вкладку с указанным URL.
PageAdapter.kt
class PageAdapter(
private val context: Context,
private val fragmentManager: FragmentManager,
private val tabs: ArrayList<Tab>
): FragmentStatePagerAdapter(fragmentManager) {
companion object {
val TAG = PageAdapter::class.java.simpleName
}
override fun getCount(): Int {
return tabs.size
}
override fun getItem(position: Int): Fragment {
return tabs[position].fragment
}
override fun getPageTitle(position: Int): CharSequence? {
return "View " + (position + 1)
}
}
newTab ()
fun newTab(url: String) = runBlocking {
val id = UUID.randomUUID().toString()
val bundle = Bundle()
bundle.putString("id", id)
bundle.putString("url", url)
val fragment = WebViewFragment()
fragment.arguments = bundle
val tab = Tab(id, url, url, fragment)
tabs.add(tab)
currentTabIndex = tabs.size - 1
launch(Dispatchers.IO) {
database?.eagleDao()?.putId(TabId(id))
}
}
removeTab ()
fun removeTab(id: String) = runBlocking {
findTabPosition(id)?.also {
val tab = tabs[it]
launch(Dispatchers.IO) {
database?.eagleDao()?.removeId(tab.id)
}
tabs.removeAt(it)
}
currentTabIndex = tabs.lastIndex
}