Created
March 20, 2017 14:36
-
-
Save senneco/ef2910a5b53aacdb053ebca21b10ef77 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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(); | |
} |
Передается из родительской View. Например из MvpActivity или MvpFragment. У них есть специальный метод getMvpDelegate()
Передается из родительской View. Например из MvpActivity или MvpFragment. У них есть специальный метод getMvpDelegate()
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?
Attach происходит примерно во-о-от здесь
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?Attach происходит примерно во-о-от здесь
Разобрался, получилось! Огромное спасибо.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
присоединяюсь к вопросу