我如何将变量从我的适配器传递到我在 Kotlin 中实例化的片段
How can i pass a variable from my adapter to a fragment i instantiate in Kotlin
我遵循了有关开始使用 tabhost 和片段的教程,其中有 link: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"
}
}
}
FragmentPagerAdapter is not having the setArguments
method. The adapter is only holding the fragments. The fragments 正在使用 setArguments
方法。
在您的 TabHostAdapter
中,您可以使用 setArguments
方法将值 activityID
设置为所需的片段(FirstFragment
或 SecondFragment
)。在返回片段之前,在您的 getItem
方法中,类似于以下内容:
val fragment = FirstFragment()
val args = Bundle()
args.putInt("activityID", activityID)
fragment.setArguments(args)
我遵循了有关开始使用 tabhost 和片段的教程,其中有 link: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"
}
}
}
FragmentPagerAdapter is not having the setArguments
method. The adapter is only holding the fragments. The fragments 正在使用 setArguments
方法。
在您的 TabHostAdapter
中,您可以使用 setArguments
方法将值 activityID
设置为所需的片段(FirstFragment
或 SecondFragment
)。在返回片段之前,在您的 getItem
方法中,类似于以下内容:
val fragment = FirstFragment()
val args = Bundle()
args.putInt("activityID", activityID)
fragment.setArguments(args)