【问题标题】:What is the correct way to pass an intent back to the original class after using the intent from the original class in Android?在Android中使用原始类的意图后,将意图传递回原始类的正确方法是什么?
【发布时间】:2016-04-03 09:22:36
【问题描述】:

如果我使用意图将字符串附加内容从第一类传递到第二类,然后再次将它们传递给第三类,我如何将相同的意图传递回第二类?

我有一个主要活动详细活动评论活动

Detail Activity 中,它正在获取从 Main Activity 传递的字符串 extras,然后将相同的数据传递给 Comments Activity如果我转到 Comments Activity 并触摸工具栏中的后退箭头以返回 Detail Activity,则应用程序会崩溃,因为它再次需要 Intent 数据。那么如何确保 Intent 数据被传递回 Detail Activity

Logcat

04-03 02:29:21.902 23236-23236/com.curtrostudios.testapp E/AndroidRuntime: 致命异常: main 进程:com.curtrostudios.testapp,PID:23236 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.curtrostudios.testapp/com.curtrostudios.testapp.ProductDetail}:java.lang.NullPointerException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248) 在 android.app.ActivityThread.access$800(ActivityThread.java:138) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5072) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 com.curtrostudios.testapp.ProductDetail.onCreate(ProductDetail.java:60) 在 android.app.Activity.performCreate(Activity.java:5334) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248) 在 android.app.ActivityThread.access$800(ActivityThread.java:138) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5072) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 在 dalvik.system.NativeStart.main(本机方法)

ProductDetail.java 中的第 60 行是final String desc = intnt.getStringExtra("desc").toString();

【问题讨论】:

  • 请报告崩溃报告?
  • @Kathi 请查看编辑
  • 在此之前检查是否为getIntent().getExtras() != null。如果null,那么您将从 cmets 活动返回,如果不是,那么您从 MainActivity 回来。
  • 首先:“工具栏中的后退箭头”称为uphome。如果您按回(真正的,在底部),它会起作用吗?如果您将启动模式更改为单顶,这可能很容易解决
  • 将 launchMode="singleTop" 添加到清单中的详细信息/评论活动中,它应该可以正常工作

标签: java android android-intent


【解决方案1】:

这是关于启动模式。使用standard,默认情况下,只会将一个新活动添加到堆栈中。

UpHome 与父活动集一起使用,将启动父活动。当launchMode 设置为standard 时,这将创建一个新实例,没有意图,导致此NPE。 返回按钮只会弹出堆栈,这就是为什么它在按返回时起作用。

使用

launchMode="singleTop"

关于清单中的父活动。 通过在您的 Manifest 中设置 launchMode=singleTop,堆栈中将只有一个该活动的实例,从而将您的活动置于最前面,从您离开的地方继续。

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 2021-07-29
    • 2015-02-22
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多