Android 砂浆:在一个活动中有几个相同视图的实例

Android 砂浆:在一个活动中有几个相同视图的实例,android,mortar,Android,Mortar,是否可能在一个具有Mortart库的活动中有几个相同视图的实例? 在这种情况下,如何初始化活动的作用域? 或者应该为每个视图创建一个单独的范围 我想要的是: 我的活动 -MyView(id:1) -MyView(id:2) 我已经试过了,但是我的演示者的onLoad/onSave都变得一团糟。没有必要为孩子们设置子范围。或者,真的,这总是一个优化 演示者必须始终是一个单独的人,因此,如果您需要多个视图同时显示同一类型的演示者,您需要做一些事情来为每个视图创建一个单独的人。例如,您可以为Prese

是否可能在一个具有Mortart库的活动中有几个相同视图的实例? 在这种情况下,如何初始化活动的作用域? 或者应该为每个视图创建一个单独的范围

我想要的是:

我的活动 -MyView(id:1) -MyView(id:2)


我已经试过了,但是我的演示者的onLoad/onSave都变得一团糟。

没有必要为孩子们设置子范围。或者,真的,这总是一个优化

演示者必须始终是一个单独的人,因此,如果您需要多个视图同时显示同一类型的演示者,您需要做一些事情来为每个视图创建一个单独的人。例如,您可以为Presenter创建基类,并为各个视图类型创建子类,或者可以使用绑定注释(例如@Inject@TheBlueOne MyPresenter Presenter;)

如果您正在执行更具动态性的操作,例如创建所有子视图都需要相同类型的演示者的列表,则可以将父视图的演示者设置为子演示者工厂。有一个想法:

ParentView {
  void addRow(int id) {
    MyRowView newRow = new MyRowView(getContext(), presenter);
    newRow.setId(id);
    addChild(newRow);
  }
}

ChildView {
  final ParentPresenter parentPresenter;
  ChildPresenter presenter;

  public ChildView(Context context, ParentPresenter parentPresenter) {
    super(context);
    this.parentPresenter = parentPresenter;
  }

  protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    presenter = parentPresenter.getChild(getId());
    presenter.takeView(this);
  }

  protected void onDetachedFromWindow() {
    presenter.dropView(this);
    super.onDetachedFromWindow();
  }
}

@Singleton
ParentPresenter {
  final Map<Integer, ChildPresenter> childrens = new HashMap<>();
  final Provider<ChildPresenter> childrensProvider;

  @Inject
  ParentPresenter(Provider<ChildPresenter> childrensProvider) {
    this.childrensProvider = childrensProvider;
  }

  ChildPresenter getChild(int id) {
    ChildPresenter child = childrens.get(id);
    if (childPresenter == null) {
      child = childrensProvider.get();
      childrens.put(id, child);
    }
    return child;
  }
}
ParentView{
void addRow(int-id){
MyRowView newRow=新建MyRowView(getContext(),presenter);
newRow.setId(id);
addChild(纽罗);
}
}
儿童视图{
最终家长演示者家长演示者;
儿童节目主持人;
公共子视图(上下文上下文,ParentPresenter ParentPresenter){
超级(上下文);
this.parentPresenter=parentPresenter;
}
受保护的无效数据附加到DOWINDOW(){
super.onAttachedToWindow();
presenter=parentPresenter.getChild(getId());
演讲者。takeView(本);
}
受保护的无效onDetachedFromWindow(){
presenter.dropView(此);
super.onDetachedFromWindow();
}
}
@独生子女
家长演示者{
final-Map childrens=新HashMap();
最终提供者子女提供者;
@注入
ParentPresenter(提供者childrensProvider){
this.childrensProvider=childrensProvider;
}
ChildPresenter getChild(整数id){
ChildPresenter child=childrens.get(id);
if(childPresenter==null){
child=childrensProvider.get();
儿童。put(id,儿童);
}
返回儿童;
}
}

哇,太棒了!谢谢:)