Android Kotlin:片段下有Intent的setOnClickListener

问题描述 投票:0回答:2

我正在尝试在Fragment下创建具有Intent的setOnClickListener,但是当我尝试使用以下方法实例化Intent对象时,出现以下错误:

    US.setOnClickListener {

        var intent = Intent(this, US_Fragment::class.java)
        startActivity(intent)
    }

错误消息:使用提供的参数不能调用以下任何函数。(Context !, Class !)在android.content.Intent中定义(String !, Uri!)在android.content.Intent

中定义

当我单击android:id =“ @ + id / US”时,我希望NewsFragment.kt跳到US_Fragment.kt。

非常感谢。

NewsFragment.kt

import kotlinx.android.synthetic.main.fragment_news.*

class NewsFragment : Fragment() {
    private var param1: String? = null
    private var param2: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }

        US.setOnClickListener {

            var intent = Intent(this, US_Fragment::class.java)
            startActivity(intent)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        ///val view = inflater.inflate(R.layout.fragment_news, container, false)
        ///view.recyclerView_news.layoutManager = LinearLayoutManager(activity)
        ///view.recyclerView_news.adapter = MainAdapter()

        ///return view

    }


    companion object {
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            NewsFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }


}

fragment_news.kt

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="view.NewsFragment">

    <!-- TODO: Update blank fragment layout -->


    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <Button
            android:id="@+id/US"
            android:layout_width="match_parent"
            android:layout_height="269dp"
            android:text="North Americas"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/EMEA"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/EMEA"
            android:layout_width="match_parent"
            android:layout_height="269dp"
            android:text="EMEA"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/US" />

        <Button
            android:id="@+id/ASIA"
            android:layout_width="match_parent"
            android:layout_height="269dp"
            android:text="ASIA"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/EMEA" />

    </androidx.constraintlayout.widget.ConstraintLayout>


</FrameLayout>
android android-fragments kotlin android-intent
2个回答
0
投票
替换您的OnClickListener代码

US.setOnClickListener { var intent = Intent(this, US_Fragment::class.java) startActivity(intent) }

带有以下代码:

US.setOnClickListener { var intent = Intent(requireContext(), US_Fragment::class.java) startActivity(intent) }


0
投票
这应该工作

US.setOnClickListener { var intent = Intent(applicationContext, US_Fragment::class.java) startActivity(intent) }

© www.soinside.com 2019 - 2024. All rights reserved.