Android Kotlin: setOnClickListener with Intent under Fragmen



>我正在尝试在片段下创建一个带有意图的setOnClickListener,但是当我尝试实例化Intent对象时,我得到以下错误:

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

错误信息: 以下任何函数都不能使用提供的参数调用。 (上下文!,类<*>!(在 android.content.Intent 中定义 (字符串!,乌里!在 android.content.Intent 中定义

我希望我的 NewsFragment.kt 在点击 android:id="@+id/US" 时跳转到 US_Fragment.kt。

谢谢。

新闻片段.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>

FragmentNews.kt (已编辑(

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(requireContext(), US_Fragment::class.java)
startActivity(intent)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_us, container, false)
}

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

}

日志猫错误:

2020-05-19 16:53:06.264 21495-21495/? E/e.myapplicatio: Unknown bits set in runtime_flags: 0x8000
2020-05-19 16:53:10.706 21495-21495/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 21495
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at view.NewsFragment.onCreate(NewsFragment.kt:35)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:280)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1175)
at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1255)
at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1138)
at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:136)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1989)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303)
at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:246)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:669)
at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631)
at androidx.viewpager.widget.ViewPager.setCurrentItem(ViewPager.java:612)
at com.google.android.material.tabs.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2831)
at com.google.android.material.tabs.TabLayout.dispatchTabSelected(TabLayout.java:1608)
at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1601)
at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1569)
at com.google.android.material.tabs.TabLayout$Tab.select(TabLayout.java:1874)
at com.google.android.material.tabs.TabLayout$TabView.performClick(TabLayout.java:2059)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

这应该有效

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

替换您的 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)
}

最新更新