[英]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.