Удалить и добавить новую вкладку в ViewPager с Fragment WebView - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать браузер для Android, поэтому для этого я подумал, что использование viewpager с FragmentStatePagerAdapter - хорошая идея. Но однажды я удалил одну вкладку и добавил новую, возвращающую старый фрагмент, но я хочу новую вкладку с указанным URL.

Demo

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
}
...