我正在用Android编写一个非常简单的应用程序,但是在将数据传递到片段时遇到了问题。
我有一个带有ViewPager的TabLayout。
此TabLayout显示两个片段。一个片段是静态的,按照我的意图是硬编码的。第二个片段包含一个ImageView,它显示一张优惠券图像。
我希望CouponFragemnt显示从PagerAdapter传递到此片段的图像,但我不知道该怎么做。
使用什么以及如何使用?捆绑包,其他?
我在将图像发布到StackOverflow上没有太多声誉,但是您可以在这里查看:https://i.imgur.com/Dc27bQM.png
class ViewPagerAdapter( fm: FragmentManager, private val numberOfFrags: Int) : FragmentStatePagerAdapter(fm) {
override fun getItem(position: Int): Fragment? {
when (position) {
0 -> return HowToUseFragment()
1 -> return CouponFragment() // I want to pass data, which tells fragment what image to display.
}
return null
}
override fun getCount(): Int {
return numberOfFrags
}
override fun getPageTitle(position: Int): CharSequence? {
when (position) {
0 -> return "Jak używać?"
1 -> return "Hamburger"
}
return super.getPageTitle(position)
}
}
class CouponFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val viewOfLayout = inflater.inflate(R.layout.fragment_coupon, container, false)
if (Build.VERSION.SDK_INT >= 21) {
viewOfLayout.coupon_IMGV.setImageDrawable(resources.getDrawable(R.drawable.coupon_hamburger, null))
}
else {
viewOfLayout.coupon_IMGV.setImageDrawable(resources.getDrawable(R.drawable.coupon_hamburger))
}
return viewOfLayout
}
}
答案 0 :(得分:0)
构造方法:使用构造方法传递数据:
class CouponFragment(val imageId:Int) : Fragment() { // or any data you want
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val viewOfLayout = inflater.inflate(R.layout.fragment_coupon, container, false)
if (Build.VERSION.SDK_INT >= 21) {
viewOfLayout.coupon_IMGV.setImageDrawable(resources.getDrawable(R.drawable.coupon_hamburger, null))
}
else {
viewOfLayout.coupon_IMGV.setImageDrawable(resources.getDrawable(R.drawable.coupon_hamburger))
}
return viewOfLayout
}
}
...
when (position) {
0 -> return HowToUseFragment()
1 -> return CouponFragment(R.id.your_awesome_image)
}
捆绑方式:
class CouponFragment:Fragment(){
...
companion object {
const val DATA_KEY= "name"
fun newInstance(imageId: Int): CouponFragment{
val fragment = CouponFragment().apply{
arguments = Bundle().apply {
putInt(DATA_KEY, imageId)
}
}
return fragment
}
}
...
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val yourAwesomeImage = arguments?.getInt(DATA_KEY)
// ...
}
如何使用它:
when (position) {
0 -> return HowToUseFragment()
1 -> return CouponFragment.newInstance(R.id.you_awesome_image)
}
答案 1 :(得分:0)
您可以在应用程序运行时使用appSession来保存数据。因此,创建一个AppSession类以保存图像资源。
class AppSession {
private var instance: AppSession? = null
@Synchronized
fun getInstance(): AppSession {
if (instance == null) {
instance = AppSession()
}
return instance as AppSession
}
fun setInstance(instance: AppSession) {
AppSession().instance = instance
}
public var imageUrl:String?=null
//use this to save the image resource as per your code }
您可以调用AppSession().getInstance().imageUrl
来设置适配器中的图像资源,然后调用AppSession().getInstance().imageUrl
来获取片段中的URL。