问题描述
我是 android kotlin 的初学者,当我运行我的第一个应用程序时发生了这个错误
从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
但是,我就是不明白为什么 myIntent
变红了,上面写着
未回复的引用:myIntent
holder.setClick(object:IRecyclerClick{
override fun onClick(view: View,posistion: Int) {
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(Intent (context,Chapteractivity::class.java))
com.tutorial.kotlinfirebasecomicreader.Common.Common.selected_comic=comicList[position]
}
})
我知道这只是我无法解决这个问题,我尝试了很多方法但仍然没有成功, 这就是我来到 stackoverflow 的原因。有人可以帮我吗?
MyComicAepter.kt
package com.tutorial.kotlinfirebasecomicreader.Adapter
import android.content.Context
import android.content.Intent
import android.graphics.Insets.add
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.OneshotPreDrawListener.add
import androidx.recyclerview.widget.RecyclerView
import com.squareup.picasso.Picasso
import com.tutorial.kotlinfirebasecomicreader.Chapteractivity
import com.tutorial.kotlinfirebasecomicreader.Interface.IRecyclerClick
import com.tutorial.kotlinfirebasecomicreader.Model.Chapter
import com.tutorial.kotlinfirebasecomicreader.Model.Comic
import com.tutorial.kotlinfirebasecomicreader.R
class MyComicAdapter(internal var context:Context,internal var comicList:
List<Comic>) : RecyclerView.Adapter<MyComicAdapter.MyViewHolder> () {
class MyViewHolder(itemView:View) : RecyclerView.ViewHolder(itemView),View.OnClickListener {
var imageView:ImageView
var texView:TextView
lateinit var iRecyclerClick: IRecyclerClick
fun setClick(iRecyclerClick: IRecyclerClick)
{
this.iRecyclerClick = iRecyclerClick
}
init {
imageView = itemView.findViewById(R.id.comic_image) as ImageView
texView = itemView.findViewById(R.id.comic_name) as TextView
itemView.setonClickListener(this)
}
override fun onClick(v: View?) {
iRecyclerClick.onClick(v!!,adapterPosition)
}
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int):
MyViewHolder {
val itemView =
LayoutInflater.from(context).inflate(R.layout.comic_item,parent,false)
return MyViewHolder(itemView)
}
override fun onBindViewHolder(holder: MyViewHolder,position: Int) {
Picasso.get().load(comicList[position].Image).into(holder.imageView)
holder.texView.text = comicList[position].Name
holder.setClick(object:IRecyclerClick{
override fun onClick(view: View,posistion: Int) {
val myIntent= Intent (context,Chapteractivity::class.java)
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(Intent(context,Chapteractivity::class.java))
com.tutorial.kotlinfirebasecomicreader.Common.Common.
selected_comic=comicList[position]
}
})
}
override fun getItemCount(): Int {
return comicList.size
}
}
我的 Logcat
2021-03-03 09:10:32.452 4804-4804/com.tutorial.kotlinfirebasecomicreader E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tutorial.kotlinfirebasecomicreader,PID: 4804
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:1003)
at android.app.ContextImpl.startActivity(ContextImpl.java:979)
at android.content.Contextwrapper.startActivity(Contextwrapper.java:402)
at com.tutorial.kotlinfirebasecomicreader.Adapter.MyComicAdapter$onBindViewHolder$1.onClick(MyComicAdapter.kt:61)
at com.tutorial.kotlinfirebasecomicreader.Adapter.MyComicAdapter$MyViewHolder.onClick(MyComicAdapter.kt:41)
at android.view.View.performClick(View.java:7281)
at android.view.View.performClickInternal(View.java:7258)
at android.view.View.access$3700(View.java:804)
at android.view.View$PerformClick.run(View.java:27995)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Lo
第 61 行
com.tutorial.kotlinfirebasecomicreader.Common.Common.selected_comic=comicList[position]
第 41 行
iRecyclerClick.onClick(v!!,adapterPosition)
解决方法
你必须先初始化 myIntent,然后设置你的标志,最后开始你的意图:
编辑:你的 setClick() 应该是这样的:
holder.setClick(object:IRecyclerClick{
override fun onClick(view: View,posistion: Int) {
com.tutorial.kotlinfirebasecomicreader.Common.Common.
selected_comic=comicList[position]
val myIntent= Intent (context,ChapterActivity::class.java)
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(myIntent)
}
})
我不知道这行是做什么的,但我会把它放在 startActivity(intent)
com.tutorial.kotlinfirebasecomicreader.Common.Common.selected_comic=comicList[position]
您可以在此处找到更多信息:https://developer.android.com/training/basics/firstapp/starting-activity#kotlin