有意在活动之间传递接口



我有这样的情况:a类(实现接口I(、Modal和B类(实现接口Ⅰ(。

类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类(SelectMethod(

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

接口

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

要使一个类可序列化,所有这些字段都需要是可序列化的(可以写/读保持状态(,任何扩展View的类都有不可序列化的字段,比如Contexts和Listeners,它们都是实例。

你不应该试图通过意图传递activity/views/fragments实例,因为它破坏了android的生命周期行为。

由于您使用的是模式主题的活动,因此您可以使用

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

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

结果从FirstActivity读取到:

@Override public void onActivityResult

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

最新更新