微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复 myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

如何解决如何修复 myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

我是 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。