【问题标题】:Code is not working in Android/Oxygen OS related phones but working in Galaxy phone代码不适用于 Android/Oxygen OS 相关手机,但适用于 Galaxy 手机
【发布时间】:2019-03-21 17:47:03
【问题描述】:

我在 Playstore 中部署了我的应用程序,它在 Galaxy 手机中运行没有问题,但在 Oxygen OS 中崩溃。下面是我的代码和错误。任何建议都非常感谢。

使用的语言 科特林

尝试过的选项

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

代码:

override fun onBindViewHolder(p0: MyViewHolder, p1: Int) {
    Picasso.get().load(testList[p1].Image).into(p0.imageView)
    p0.textView.text=testList[p1].Name
    p0.setClick(object:IRecyclerClick
    {
        override fun onClick(view: View, position: Int) {
         context.startActivity(Intent(context,MainActivity::class.java))
            Intent(context, MainActivity::class.java)
            Common.selected_test=testList[position]

        }
    }
    )
}

错误:

2019-03-19 23:57:00.545 26980-26980/com.candy.testreader E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.candy.testreader, PID: 26980
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:912)
    at android.app.ContextImpl.startActivity(ContextImpl.java:888)
    at com.candy.testreader.Adapter.MyTestAdapter$onBindViewHolder$1.onClick(MyTestAdapter.kt:39)
    at com.candy.testreader.Adapter.MyTestAdapter$MyViewHolder.onClick(MyTestAdapter.kt:50)
    at android.view.View.performClick(View.java:6597)
    at android.view.View.performClickInternal(View.java:6574)
    at android.view.View.access$3100(View.java:778)
    at android.view.View$PerformClick.run(View.java:25885)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

【问题讨论】:

  • 什么是上下文 - 活动上下文或应用程序上下文?如果是后者,请更改为使用 Activity 上下文。如果您在 View 中,应该可以使用其中的代码。
  • 活动上下文。
  • 我不知道为什么它在银河手机上工作,但在谷歌操作系统相关的手机上却不行。我的适配器出现此错误。

标签: android android-intent kotlin android-inflate


【解决方案1】:

您的上下文对象似乎是问题所在,您传递的是哪个上下文?在更安全的方面,通过从初始化视图中获取上下文来做这样的事情 喜欢

override fun onBindViewHolder(p0: MyViewHolder, p1: Int) {
Picasso.get().load(testList[p1].Image).into(p0.imageView)
p0.textView.text=testList[p1].Name
p0.setClick(object:IRecyclerClick
{
    override fun onClick(view: View, position: Int) {
     view.context.startActivity(Intent(view.context,MainActivity::class.java))
        Intent(view.context, MainActivity::class.java)
        Common.selected_test=testList[position]

    }
}
)}

编辑:解释为什么使用我所解释的上下文是因为一个对用户来说是膨胀且可见的视图包含对其所在 Activity 上下文的引用。

阅读:https://android-developers.googleblog.com/2009/01/avoiding-memory-leaks.html

【讨论】:

  • 感谢@king_below_my_lord 的评论。我可以在 Google 设备上运行我的应用程序。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多