Как я могу передать переменную из моего адаптера в фрагмент, который я создаю в Kotlin - PullRequest
0 голосов
/ 24 апреля 2018

Я следовал руководству по началу работы с tabhost и фрагментами, там есть ссылка: https://medium.com/@eijaz/getting-started-with-tablayout-in-android-kotlin-bb7e21783761

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

Я обнаружил в Интернете, что есть метод setArgument, но ни один из моих объектов не содержит этот метод.

Я сделал что-то не так?Или кто-то может объяснить мне, как отправить мое значение из моего ActivityTabHost в мой фрагмент?

Это мой ActivityTabHost.kt

import android.os.Bundle
import training.gutai.apps.gutai.R
import kotlinx.android.synthetic.main.activity_tabhost.*
import android.support.v7.app.AppCompatActivity
import android.util.Log
import training.gutai.apps.gutai.models.TabHostAdapter


class ActivityTabHost : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_tabhost)

        val activityID = intent.extras.getInt("id")
        Log.d("Id", activityID.toString())
        val fragmentAdapter = TabHostAdapter(supportFragmentManager, activityID)
        viewpager_main.adapter = fragmentAdapter
        tabs_main.setupWithViewPager(viewpager_main)
    }
}

А это мой TabHostAdapter.kt:

import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import training.gutai.apps.gutai.viewControllers.FirstFragment
import training.gutai.apps.gutai.viewControllers.SecondFragment

class TabHostAdapter(fm: FragmentManager, activityID : Int) :         FragmentPagerAdapter(fm) {

    val fm : FragmentManager = fm

    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> {
                FirstFragment()
            }
            else -> {
                SecondFragment()
            }
        }
    }

    override fun getCount(): Int {
        return 2
    }

    override fun getPageTitle(position: Int): CharSequence {
        return when (position) {
            0 -> "First Tab"
            else -> "Second Tab"
        }
    }
}

1 Ответ

0 голосов
/ 24 апреля 2018

FragmentPagerAdapter не имеет метода setArguments. Адаптер держит только фрагменты. фрагменты имеют метод setArguments.

В вашем TabHostAdapter вы можете установить значение activityID для нужного фрагмента (FirstFragment или SecondFragment), используя метод setArguments. Что-то вроде следующего в вашем методе getItem перед возвратом фрагмента:

val fragment = FirstFragment()
val args = Bundle()
args.putInt("activityID", activityID)
fragment.setArguments(args)    
...