【问题标题】:passing data from activity to fragment in android studio kotlin(not duplicate, those method is not working)在 android studio kotlin 中将数据从活动传递到片段(不重复,这些方法不起作用)
【发布时间】: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)

                }
            }
    }
}

但是,我仍然无法在适配器上获取我的网址

【问题讨论】:

    标签: android kotlin android-fragments


    【解决方案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_width="match_parent"
      android:layout_height="match_parent">
    </FrameLayout>
    

    【讨论】:

    • 是的,也尝试过这种方法,但是当我点击图像时,它返回主屏幕(有一个图像列表,我点击它会打开新的活动,其中包含这个片段)
    猜你喜欢
    • 2020-03-06
    • 2020-09-24
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2015-12-04
    • 2018-03-07
    相关资源
    最近更新 更多