首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >它的主要活动片段之间的Kotlin传递数据为空。

它的主要活动片段之间的Kotlin传递数据为空。
EN

Stack Overflow用户
提问于 2018-03-12 18:10:30
回答 1查看 8.1K关注 0票数 1

我很难将数据从主要活动传递到它的片段。这里的主要活动是ProductActivity.class,它使用使用Kotlin的制表布局有两个片段。

使用bundle并将其设置为参数似乎不是编译器的错误,因为字符串在创建新片段后没有保存,或者可能为null。

代码语言:javascript
复制
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
                                                                      at my.hipi.hipiboutique.fragments.ProductPageFragment.onCreateView(ProductPageFragment.kt:22)

我使用这个字符串示例只是为了这个问题在两个片段之间传递,但基本上我使用的是json字符串。

ProductActivity

代码语言:javascript
复制
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.google.gson.Gson
import kotlinx.android.synthetic.main.activity_product.*
import my.hipi.hipiboutique.fragments.ProductPageFragment
import java.util.ArrayList

class ProductActivity : AppCompatActivity() {

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

        val product1 = this.intent.getStringExtra("array")
        val fullProduct = Gson().fromJson(product1, Product::class.java)

        val testString : String = "example only"
        var bundle = Bundle()
        bundle.putString("test", testString)
        var frag = ProductPageFragment()
        frag.arguments = bundle

        viewPager_fragment.adapter = TabsAdapter(supportFragmentManager)
        tabLayout.setupWithViewPager(viewPager_fragment)

    }


}

我是TabsAdapter

代码语言:javascript
复制
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import my.hipi.hipiboutique.fragments.ProductDetailFragment
import my.hipi.hipiboutique.fragments.ProductPageFragment

class TabsAdapter(manager: FragmentManager) : FragmentPagerAdapter (manager) {

    private val fragmentTitles = arrayOf("Product", "Details", "Contacts")

    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 ->  ProductPageFragment()
            1 ->  ProductDetailFragment()
            //2 ->  ContactsFragment()
            else ->  ProductPageFragment()
        }
    }

    override fun getCount(): Int {
         return 3
    }

    override fun getPageTitle(position: Int): CharSequence {
        return fragmentTitles[position]
    }

}

我是ProductPageFragemnt.class

代码语言:javascript
复制
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import my.hipi.hipiboutique.R

class ProductPageFragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment

        var gt = this.arguments.getString("test")
        println(gt)

        return inflater!!.inflate(R.layout.fragment_product_page, container, false)  
    }
}

如何将此数据字符串传递给两个片段。是的可以传递给一个片段,但是如果转到第二个选项卡,将导致空数据。我希望这两个片段都能预先获得这些数据,.Thank。

EN

回答 1

Stack Overflow用户

发布于 2018-03-12 18:20:30

在您的ProductActivity中,您正在创建一个片段并设置它的参数,但是您没有对该片段做任何事情。它就会被扔掉:

testString : String =“仅限示例”var bundle = Bundle() bundle.putString("test",testString) var frag = ProductPageFragment() frag.arguments = bundle

在您的TabsAdapter中,您创建了实际使用的片段,但从未设置它们的参数:

重写乐趣getItem(位置: Int):片段{当(位置){0 -> ProductPageFragment() 1 -> ProductDetailFragment() //2 -> ContactsFragment() -> -> ProductPageFragment() }}时返回

您可以删除代码的第一部分,但是需要在适配器中应用相同的逻辑。也许是这样的:

代码语言:javascript
复制
override fun getItem(position: Int): Fragment {
    return when (position) {
        0 -> {
            var bundle = Bundle()
            bundle.putString("test", "some string here")
            var frag = ProductPageFragment()
            frag.arguments = bundle
            frag
        }
        ...
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49241857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档