Я создаю представление entend FrameLayout, которое имеет около 10 параметров.
Я думал об использовании шаблона 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);
}
}