Сделать что-то на вкладке выберите с Android Kotlin - PullRequest
0 голосов
/ 13 января 2019

У меня есть проект, в котором я использую tablayout с использованием viewPager, следуя этому хорошему учебнику https://medium.com/@eijaz/getting-started-with-tablayout-in-android-kotlin-bb7e21783761

Проблема, с которой я столкнулся, заключается в том, что после создания экземпляров / фрагментов в представлениях больше ничего не происходит. Они действительно статичны. Я хочу заполнить представления переработчика данными, полученными с сервера. Не один раз, не дважды, но каждый раз, когда пользователь нажимает некоторые вкладки.

Я пытался найти ответ, но мне не повезло. Может быть, viewPager с фрагментами не должен меняться после инициализации?

-MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val fragmentAdapter = MyPagerAdapter(supportFragmentManager)
        viewpager_main.adapter = fragmentAdapter

        mainTabbedLayout.setupWithViewPager(viewpager_main)
    }
}

-MyPagerAdapter.kt

class MyPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {

    val fragmentList = listOf<Fragment>(ListFragment(), ScanFragment(), MinFragment(), SettingsFragment())

    override fun getItem(position: Int): Fragment {
        when (position) {
            0 -> {
                Log.d("Fragment", "Position: $position")
               return fragmentList[position]
            }
            1 -> {
                Log.d("Fragment", "Position: $position")
                return fragmentList[position]
            }
            2 -> {
                Log.d("Fragment", "Position: $position")
                return fragmentList[position]
            }
            3 -> {
                Log.d("Fragment", "Position: $position")
                return fragmentList[position]
            }
            else -> {
                throw IllegalArgumentException()
            }

        }
    }

    override fun getCount(): Int {
        return fragmentList.count()
    }

    override fun getPageTitle(position: Int): CharSequence {
        return when (position) {
            0 -> "Liste"
            1 -> "Scan"
            2 -> "Min"
            3 -> "Settings"
            else -> {
                throw IllegalArgumentException()
            }
        }
    }
}

-ListFragment.kt

class ListFragment : Fragment() {

    val TAG = "ListFragment"

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater!!.inflate(R.layout.list_fragment, container, false)

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        Log.d(TAG, "onViewCreated")

    }
}

В MyPagerAdapter.kt установка FragmentStatePagerAdapter (не FragmentPagerAdapter) заставила представления перезагрузиться, если вы нажмете на вкладку достаточно далеко, но этого недостаточно. Я уже создал приложение, которое хочу создать в iOS, где специальные функции всегда запускаются при посещении в макете с вкладками. Разве это не возможно в этом случае?

Есть ли способ заставить новую инициализацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...