在 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 studio怎么用kotlin

如何在android Studio中更改Kotlin android项目的名称[重复]

Android首要开发语言:架构师详解在Android Studio上使用Kotlin

android studio安装和配置kotlin