-
-
Save senneco/ef2910a5b53aacdb053ebca21b10ef77 to your computer and use it in GitHub Desktop.
class AccountHolder extends MvpViewHolder implements AccountView { | |
@InjectPresenter | |
AccountPresenter mAccountPresenter; | |
/** | |
@BindView(R.id.item_account_check_box) | |
CheckBox mCheckBox; | |
... | |
**/ | |
private Account mAccount; | |
AccountHolder(View itemView) { | |
super(mParentDelegate, itemView); | |
} | |
@ProvidePresenter | |
AccountPresenter provideAccountPresenter() { | |
return new AccountPresenter(mAccount.getCode()); | |
} | |
// Call from onBindViewHolder | |
public void setAccount(Account account) { | |
destroyMvpDelegate(); | |
mAccount = account; | |
createMvpDelegate(); | |
itemView.setOnClickListener(view -> mAccountsPresenter.onAccountClick(account)); | |
} | |
// Critical! Return this item unique id | |
@Override | |
protected String getMvpChildId() { | |
return mAccount == null ? null : mAccount.getId(); | |
} | |
// implement acccount veiw | |
} |
/** | |
* Date: 15.11.2016 | |
* Time: 9:41 | |
* | |
* @author Savin Mikhail | |
*/ | |
public abstract class MvpViewHolder extends RecyclerView.ViewHolder { | |
private MvpDelegate mMvpDelegate; | |
private final MvpDelegate mParentDelegate; | |
public MvpViewHolder(MvpDelegate<?> parentDelegate, final View itemView) { | |
super(itemView); | |
ButterKnife.bind(this, itemView); | |
mParentDelegate = parentDelegate; | |
} | |
@Nullable | |
protected MvpDelegate getMvpDelegate() { | |
if (getMvpChildId() == null) { | |
return null; | |
} | |
if (mMvpDelegate == null) { | |
mMvpDelegate = new MvpDelegate<>(this); | |
mMvpDelegate.setParentDelegate(mParentDelegate, getMvpChildId()); | |
} | |
return mMvpDelegate; | |
} | |
protected void destroyMvpDelegate() { | |
if (getMvpDelegate() != null) { | |
getMvpDelegate().onSaveInstanceState(); | |
getMvpDelegate().onDetach(); | |
mMvpDelegate = null; | |
} | |
} | |
protected void createMvpDelegate() { | |
if (getMvpDelegate() != null) { | |
getMvpDelegate().onCreate(); | |
getMvpDelegate().onAttach(); | |
} | |
} | |
protected abstract String getMvpChildId(); | |
} |
@xanderblinov поправил текущий немного вот ссылка
AccountHolder(View itemView) { super(mParentDelegate, itemView); }Откуда берётся поле mParentDelegate ?
присоединяюсь к вопросу
Передается из родительской View. Например из MvpActivity или MvpFragment. У них есть специальный метод getMvpDelegate()
Передается из родительской View. Например из MvpActivity или MvpFragment. У них есть специальный метод getMvpDelegate()
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?
Attach происходит примерно во-о-от здесь
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?Attach происходит примерно во-о-от здесь
Разобрался, получилось! Огромное спасибо.
@AlexeyKorshun сделаешь gist как правильно? тогда его приаттачим