将数据从 activity 传递到 android studio kotlin 中的片段(不重复,那些方法不起作用)

passing data from activity to fragment in android studio kotlin(not duplicate, those method is not working)

我有一个名为 Image activity 的 activity 里面有 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)

                }
            }
    }
}

但是,我仍然无法在适配器上获得我的 url

我想你没有开始你的片段。 您刚刚创建了片段对象,但从未使用管理器打开它。

请更新您的 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_width="match_parent"
  android:layout_height="match_parent">
</FrameLayout>