我有一個應用程序設置使用迫擊炮/流量和匕首2.它似乎工作,除了當我在同一類的兩個視圖之間切換。新視圖以前一個視圖的主持人結束。如何防止砂漿作用域在屏幕上持續存在?
例如,我有一個ConversationScreen,它將conversationId作爲構造函數參數。第一次創建ConversationScreen並將其添加到Flow中時,它會創建ConversationView,它將自身注入一個Presenter,該Presenter是使用傳遞給屏幕的conversationId創建的。如果我使用不同的conversationId創建一個新的ConversationScreen,當ConversationView請求一個Presenter時,Dagger返回舊的Presenter,因爲範圍在前一個ConversationScreen中尚未關閉。
在我設置新的屏幕之前,有沒有辦法讓我手動關閉前一個屏幕的範圍?或者我剛剛設置了錯誤的範圍?
ConversationView
public class ConversationView extends RelativeLayout {
@Inject
ConversationScreen.Presenter presenter;
public ConversationView(Context context, AttributeSet attrs) {
super(context, attrs);
DaggerService.<ConversationScreen.Component>getDaggerComponent(context).inject(this);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
presenter.takeView(this);
}
@Override
protected void onDetachedFromWindow() {
presenter.dropView(this);
super.onDetachedFromWindow();
}
}
ConversationScreen
@Layout(R.layout.screen_conversation)
public class ConversationScreen extends Paths.ConversationPath implements ScreenComponentFactory<SomeComponent> {
public ConversationScreen(String conversationId) {
super(conversationId);
}
@Override
public String getTitle() {
title = Conversation.get(conversationId).getTitle();
}
@Override
public Object createComponent(SomeComponent parent) {
return DaggerConversationScreen_Component.builder()
.someComponent(parent)
.conversationModule(new ConversationModule())
.build();
}
@dagger.Component(
dependencies = SomeComponent.class,
modules = ConversationModule.class
)
@DaggerScope(Component.class)
public interface Component {
void inject(ConversationView conversationView);
}
@DaggerScope(Component.class)
@dagger.Module
public class ConversationModule {
@Provides
@DaggerScope(Component.class)
Presenter providePresenter() {
return new Presenter(conversationId);
}
}
@DaggerScope(Component.class)
static public class Presenter extends BasePresenter<ConversationView> {
private String conversationId;
@Inject
Presenter(String conversationId) {
this.conversationId = conversationId;
}
@Override
protected void onLoad(Bundle savedInstanceState) {
super.onLoad(savedInstanceState);
bindData();
}
void bindData() {
// Show the messages in the conversation
}
}
}
404在您的鏈接上(請考慮將代碼添加到您的答案) – pjco
感謝您的通知,修正。 – lukas