-
-
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(); | |
| } |
@senneco @xanderblinov этот пример некорректно работает, когда список внутри фрагмента, и открываем другой фрагмент. getMvpDelegate().onSaveInstanceState(); не вызывается и когда вернемся, то создастся новый презентер. На этот гист ссылка в Wiki есть, стоит поправить. я пока решил тем что сохраняю бандл после аттача.
@AlexeyKorshun сделаешь gist как правильно? тогда его приаттачим
@xanderblinov поправил текущий немного вот ссылка
AccountHolder(View itemView) { super(mParentDelegate, itemView); }Откуда берётся поле mParentDelegate ?
присоединяюсь к вопросу
Передается из родительской View. Например из MvpActivity или MvpFragment. У них есть специальный метод getMvpDelegate()
Передается из родительской View. Например из MvpActivity или MvpFragment. У них есть специальный метод getMvpDelegate()
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?
Attach происходит примерно во-о-от здесь
Понял, спасибо!
Такой вопрос. createMvpDelegate не вызывается в текущем примере. Как происходит Attach?Attach происходит примерно во-о-от здесь
Разобрался, получилось! Огромное спасибо.
Откуда берётся поле mParentDelegate ?