Skip to content

Instantly share code, notes, and snippets.

@senneco
Created March 20, 2017 14:36
Show Gist options
  • Save senneco/ef2910a5b53aacdb053ebca21b10ef77 to your computer and use it in GitHub Desktop.
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();
}
@askiiRobotics
Copy link

Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?

Attach происходит примерно во-о-от здесь

Разобрался, получилось! Огромное спасибо.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment