gpt4 book ai didi

android - 如何将 lambda 作为 Intent 的额外内容传递?

转载 作者:行者123 更新时间:2023-12-02 13:44:26 25 4
gpt4 key购买 nike

我是 kotlin 和 Android 的新手,我正在研究 recyclerView 但遇到了一些小问题。
基本上我有,
+ 2 个 Activity ,MainActivity 包含一个 recyclerView 和 fullDetails Activity ,通过 onClick 打开 recyclerView 的每个票证,
Activity A & Activity B
Fab 展示展示了每个项目独有的功能,如本例中的 Toast。
+对象的 ArrayList,临时菜单列表 选项 类(class),
+该类包含几个字符串和一个 lambda 变量 actionOfItem 因为我想为每个对象提供单独的功能,
+我正在尝试通过 OnClick 监听器将 lambda 传递为可序列化的 Intent ,如下所示:

val intent=Intent(context,fullDetails::class.java)
intent.putExtra("action",Runnable{tempMenuList[position].actionOfItem} as java.io.Serializable)

+在 Activity B 上,我得到这样的 lambda 并尝试调用该函数,因为这使我的应用程序崩溃,我单独创建了 行动 lambda 的类,以便我可以将 getSerializable() 编写为操作类的对象。
val action=bundle.getSerializable("function") as actions?
fabShow.setOnClickListener{
action?.action
}

现在应用程序加载了 MainActivity,但是当按下 RecyclerView 的 OnClickListner 时崩溃。
我知道我的命名非常糟糕和困惑,我不使用评论,
但是有没有办法通过一个 Intent 为每个对象传递一个独特的函数?
编辑 1:我读到我可以使用 SharedPreferences 来做到这一点,但不推荐这样做。
这是Logcat:
java.lang.ClassCastException: com.example.androidreferenceapp.MainActivity$menuAdapter$onBindViewHolder$1$1 cannot be cast to java.io.Serializable
at com.example.androidreferenceapp.MainActivity$menuAdapter$onBindViewHolder$1.onClick(MainActivity.kt:58)
at android.view.View.performClick(View.java:6605)
at android.view.View.performClickInternal(View.java:6582)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25897)
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:6762)
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)

Here's the full Source Code if that helps

最佳答案

Runnables 不可序列化。您不能简单地将任何内容转换为 Serializable 以使其可序列化——这是您必须实现的接口(interface)。而且你不能序列化对象引用,所以不可能用函数来做到这一点。

您的数据(在本例中为 tempMenuList)应位于 ViewModel 中。应将 Activity 转换为位于同一 Activity 中的 fragment 。第一个 Fragment 可以简单地通过 Intent 传递列表中项目的 Int 索引,第二个 Fragment 可以检索项目及其 action从 View 模型。

关于android - 如何将 lambda 作为 Intent 的额外内容传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60229468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com