在intent中传递活动之间的接口

vnjpjtjt  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(419)

我有这样的情况:一个类a(实现接口i)、一个模态和一个类b(实现接口i)。
a类打开模态,然后从模态转到b类。在类b中,我想返回到类a,更新了模态(尚未实现)。
我试图在两个活动之间传递接口,但收到此错误(我已在接口中扩展了serializable):

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

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();
        }
    });

b类(选择方法)

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

接口

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

9q78igpj1#

要使类可序列化,所有这些字段都需要可序列化(可以写/读保持状态),任何扩展视图的类都有不可序列化的字段,如上下文和侦听器,这些都是示例。
您不应该试图通过intent传递activity/views/fragments示例,因为它破坏了android的生命周期行为。
因为您使用的是模态主题的活动,所以可以使用

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

然后进入selectmethod,而不是从第一个活动调用方法 setResult 那么 finish 结果从firstactivity读入:

@Override public void onActivityResult

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

相关问题