简体   繁体   English

我如何将变量从适配器传递给我在Kotlin中实例化的片段

[英]How can i pass a variable from my adapter to a fragment i instantiate in Kotlin

I followed a tutorial on getting started with tabhost and fragments, there is the link: https://medium.com/@eijaz/getting-started-with-tablayout-in-android-kotlin-bb7e21783761 我遵循了有关Tabhost和片段入门的教程,有链接: https ://medium.com/@eijaz/getting-started-with-tablayout-in-android-kotlin-bb7e21783761

But I got a problem, I want to send a value activityID to a fragment that my tabhost contains and I don't know how to do it. 但是我遇到了一个问题,我想向我的Tabhost包含的片段发送一个值activityID,但我不知道该怎么做。

I found on the internet that there is a method setArgument but no one of my objects contains this method. 我在互联网上发现有一个方法setArgument,但是我的对象中没有一个包含此方法。

Did I do something wrong ? 我做错什么了吗 ? Or could someone explain to me how to send my value from my ActivityTabHost to my fragment? 或者有人可以向我解释如何将我的值从ActivityTabHost发送到片段?

This is my ActivityTabHost.kt 这是我的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)
    }
}

And this is my TabHostAdapter.kt : 这是我的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"
        }
    }
}

The FragmentPagerAdapter is not having the setArguments method. FragmentPagerAdapter没有setArguments方法。 The adapter is only holding the fragments. 适配器仅保留碎片。 The fragments are having the setArguments method. 这些片段具有setArguments方法。

In your TabHostAdapter you can set the value activityID to the desired fragment ( FirstFragment or SecondFragment ) using the setArguments method. 在你TabHostAdapter您可以将该值设置activityID到所需的片段( FirstFragmentSecondFragment使用) setArguments方法。 Something like the following, in your getItem method, before returning the fragment: 在返回片段之前,在getItem方法中执行以下操作:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM