在 android studio kotlin 中将数据从活动传递到片段(不重复,这些方法不起作用)
Posted
技术标签:
【中文标题】在 android studio kotlin 中将数据从活动传递到片段(不重复,这些方法不起作用)【英文标题】:passing data from activity to fragment in android studio kotlin(not duplicate, those method is not working) 【发布时间】:2022-01-24 05:25:11 【问题描述】:我有一个名为 Image 的活动,其中有 2 个片段,分别称为 image_display 和 image_change 片段,对于 image_activity,我从适配器(使用 getIntent)获取数据,到这里为止它工作正常。所以我想发送数据 (即 URL)到片段,但我的方法不起作用。
我的 image_activity 代码是这样的
class ImageActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_image)
var gi = getIntent()
var url = gi.getStringExtra("url")
val fragment = FragmentDisplayImage.newInstance(url.toString())
Toast.makeText(this,url , Toast.LENGTH_SHORT).show()
var manager =supportFragmentManager
manager.beginTransaction().commit()
我的 FramentImage.kt 就像
private const val ARG_PARAM1 = "url"
class FragmentDisplayImage : Fragment()
private var param1: String? = null
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
arguments?.let
param1 = it.getString("url")
var image= view?.findViewById<ImageView>(R.id.Fragimage)
Picasso.get().load(param1).resize(700, 700).centerCrop().into(image);
Toast.makeText(context, param1.toString() , Toast.LENGTH_SHORT).show()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
return inflater.inflate(R.layout.fragment_display_image, container, false)
companion object
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(param1: String) =
FragmentDisplayImage().apply
arguments = Bundle().apply
putString(ARG_PARAM1, param1)
但是,我仍然无法在适配器上获取我的网址
【问题讨论】:
【参考方案1】:我认为你没有开始你的片段。 您刚刚创建了片段对象,但从未使用管理器打开它。
请更新您的 ImageActivity 代码如下:
var gi = getIntent()
var url = gi.getStringExtra("url")
val fragment = FragmentDisplayImage.newInstance(url.toString())
val manager: FragmentManager = supportFragmentManager
val transaction: FragmentTransaction = manager.beginTransaction()
transaction.replace(R.id.container, fragment)
transaction.addToBackStack(null)
transaction.commit()
R.id.container
将是 activity_image
内的布局,您希望将片段放置在其中。
你的activity_image
应该有
<FrameLayout
android:id="@+id/container"
android:layout_
android:layout_>
</FrameLayout>
【讨论】:
是的,也尝试过这种方法,但是当我点击图像时,它返回主屏幕(有一个图像列表,我点击它会打开新的活动,其中包含这个片段)以上是关于在 android studio kotlin 中将数据从活动传递到片段(不重复,这些方法不起作用)的主要内容,如果未能解决你的问题,请参考以下文章
Android@Kotlin 在Android studio 中配置Kotlin
如何在android Studio中更改Kotlin android项目的名称[重复]