繁体   English   中英

在意图中的活动之间传递接口

[英]Pass an interface between activities in intent

我有这种情况:一个 Class A(实现接口 I),一个 Modal 和一个 Class B(实现接口 I)。

The Class A open the modal, and from the modal I go to class B. In class BI want to return to the Class A with the Modal updated (Not implemented yet).

我试图在两个活动之间传递一个接口,但我收到了这个错误(我已经在接口中扩展了 Serializable):

 Caused by: java.io.NotSerializableException: com.google.android.material.textview.MaterialTextView

Class A

@Override
public void showList() {
            Intent intent = new Intent(this, SelectMethod.class);
            intent.putExtra("iHome", this);
            startActivity(intent);
    }

模态

 # Function when click button and go to the class B
 btn_select_method.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            iHome.showList();
        }
    });

Class B(选择方法)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
     intent.getSerializableExtra("iHome");
}

界面

public interface Ihome extends Serializable {
    void showList();
}

对于 class 可序列化,所有这些字段都需要可序列化(可以写入/读取保持状态),任何扩展 View 的 class 具有不可序列化的字段,如上下文和侦听器,这些是实例。

您不应尝试通过意图传递活动/视图/片段实例,因为它会破坏 android 生命周期行为。

由于您使用带有模态主题的活动,您可以使用

startActivityForResult(intent, 25 /*any number */)

然后进入 SelectMethod 而不是从您setResult的 FirstActivity 调用方法然后finish

结果从 FirstActivity 读入:

@Override public void onActivityResult

查看更多: https://developer.android.com/training/basics/intents/result#kotlin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM