ViewPager с контроллером проводника - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь использовать viewPager Проводника (RouterPagerAdapter), и все работает отлично.Проблема возникает, когда я пытаюсь выдвинуть другой контроллер, используя экземпляр маршрутизатора текущего контроллера.

Это адаптер для пейджера представления.

class ReaderAdapter(host: Controller) : RouterPagerAdapter(host) {
    override fun configureRouter(router: Router, position: Int) {
        if (!router.hasRootController()) {
            when (position) {
                0 -> router.setRoot(RouterTransaction.with(FeedController()))
                1 -> router.setRoot(RouterTransaction.with(RssController()))
            }
        }
    }

    override fun getPageTitle(position: Int) = if (position == 0) "FEED" else "RSS"

    override fun getCount() = 2

}

Это представление:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:id="@+id/feedTab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:elevation="6dp"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        tools:targetApi="lollipop" />

    <android.support.v4.view.ViewPager
        android:id="@+id/feedPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

Способ инициализации адаптера:

class HostReaderController : BaseController() {

    companion object {
        const val TAG_UP_TRANSACTION = "TAG_UP_TRANSACTION"
    }

    override fun onInject() {
    }

    override fun onAttach(view: View) {
        feedPager?.adapter = ReaderAdapter(this)
        feedTab?.setupWithViewPager(feedPager)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View {
        return inflater.inflate(R.layout.host_reader_view, container, false)
    }

    override fun onDestroyView(view: View) {
        feedPager?.adapter = null
        feedTab?.setupWithViewPager(null)

        super.onDestroyView(view)
    }

    override fun getEnableBackAction() = false

    override fun getTitleToolbar() = ""
}

Теперь я могу лучше объяснить проблему.Когда представление является RSSController(), которое является вкладкой, есть кнопка для обмена контентом, поэтому я должен открыть новый контроллер ShareController, например:

rssController.router.pushController(RouterTransaction.with(ShareController()))

Если я сделаю это, ShareController будет создан внутрипросмотреть пейджер в виде RSSController().То, что я хочу, это создать новое представление вне viewPager, в котором нет. Я выполнил трюк, чтобы решить эту проблему:

   mainActivity.router.pushController(RouterTransaction.with(ShareControler))

Если я пытаюсь выдвинуть новый контроллер с помощью маршрутизатора FeedController иRssController представление создается как дочерний элемент контроллера, который запустился.Как я могу это исправить?

Спасибо: D

1 Ответ

0 голосов
/ 12 сентября 2018

То, что вы видите, правильно.Каждая страница имеет свой собственный маршрутизатор, поэтому все, что вы нажимаете, попадет на эту страницу, а не в родительский контейнер.Что вы, вероятно, хотели бы сделать, это что-то вроде parentController.router.pushController().

...