我很难将数据从主要活动传递到它的片段。这里的主要活动是ProductActivity.class,它使用使用Kotlin的制表布局有两个片段。
使用bundle并将其设置为参数似乎不是编译器的错误,因为字符串在创建新片段后没有保存,或者可能为null。
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
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
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
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。
发布于 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() }}时返回
您可以删除代码的第一部分,但是需要在适配器中应用相同的逻辑。也许是这样的:
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
}
...
}
}https://stackoverflow.com/questions/49241857
复制相似问题