我现在正在创建一个包含10个参数的视图,将其放置到FrameLayout中。
我正在考虑使用Builder模式,类似于AlertDialog的工作方式。但是,我不确定要实现此目标的最佳方法是什么,或者甚至不是个好主意。
这是我在想的一个例子,但是还有更多的变数。
有问题。
我想在adDetailModel
中使用变量dataLoader
中的变量init
和builder
。
public class DialogContentList extends FrameLayout {
public static DataLoader dataLoader;
static SwipeRefreshRelativeLayout contentList;
public static AdDetailModel adDetailModel;
public DialogContentList(@NonNull Context context) {
super(context);
init(context, null, 0);
}
public DialogContentList(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
public DialogContentList(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
public static class Builder {
private AdDetailModel adDetailModel;
private DataLoader dataLoader;
public Builder() {
}
public Builder setModel(AdDetailModel adDetailModel) {
this.adDetailModel = adDetailModel;
return this;
}
public Builder setDataloder(DataLoader dataLoader) {
this.dataLoader = dataLoader;
return this;
}
public DialogContentList build(final Context context) {
DialogContentList dialogContentList = new DialogContentList(context);
return dialogContentList;
}
}
private void init( Context context, AttributeSet attrs, int defStyleAttr) {
LayoutInflater.from(context).inflate(R.layout.dialog_content_list, this, true);
contentList = (SwipeRefreshRelativeLayout) findViewById(R.id.ContentList);
//
// contentList.build(new viewWrapper() {
// @Override
// public BaseWidget getView() {
// return new AdSample(context1, adDetailModel);
// }
// }, dataLoader);
}
}
答案 0 :(得分:0)
尽管我认为Builder
应该传递给Builder的构造函数,但是您对Context
模式的实现基本上是正确的。
但是,就我个人而言,我不会在DataLoader
层中添加逻辑(即AdViewModel
和View
)。另外,类顶部的变量都不应该是static
,当然不能是SwipeRefreshRelativeLayout
,这会导致内存泄漏。
在可能的情况下,完全用XML定义View
,然后使用Model-View-Presenter模式将UI与逻辑分离。您最终将获得更加灵活的体系结构。