Podążam za architekturą MVP w mojej aplikacji. My HomeActivity zawiera panel przesuwania z ikoną listy posiadającą selektor, który jest po wybraniu elementu panelu ślizgowego, gdy stan ikony został zmieniony i nie używam żadnego selektora listy.Standard architektury systemu Android MVP do ładowania interfejsu użytkownika z klasą modelu posiadającą zasoby Androida
ja utrzymując model klasy NavItemData do wypełniania nawigacyjnego szufladę i przy użyciu klasy SlidingPanelItemSelector że rozciąga StateListDrawable generuje odpowiedni przełącznik dla przesuwnych ikony panelu.
W architekturze MVP mamy klasę prezentera, która komunikuje się z modelem i generuje dane wejściowe dla widoków. W moim przypadku jeśli używam prezentera do pobierania danych z Panelu Przesuwnego, wzywam klasę od prezentera, który używa kontekstu androidowego, czy to jest dobre podejście, czy też mamy jakieś alternatywne rozwiązanie, które ściśle przestrzega architektury MVP?
Obecnie używam ViewBinderUtils klasę i wstrzykuje bezpośrednio do klasy aktywności i pobiera listę danych do panelu przesuwne. Czy to jest po Mvp Architekcie?
SlidingPanelItemSelector.class
public class SlidingPanelItemSelector extends StateListDrawable {
private Context mContext;
public SlidingPanelItemSelector(Context mContext){
this.mContext = mContext;
}
public StateListDrawable getHomeSelector(){
StateListDrawable stateListDrawable = new StateListDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
stateListDrawable.addState(new int[]{android.R.attr.state_pressed},
mContext.getDrawable(R.drawable.ic_nav_home_active));
stateListDrawable.addState(new int[]{},mContext.getDrawable(R.drawable.ic_nav_home));
}else{
stateListDrawable.addState(new int[]{android.R.attr.state_pressed},
mContext.getResources().getDrawable(R.drawable.ic_nav_home_active));
stateListDrawable.addState(new int[]{},mContext.getResources().getDrawable(R.drawable.ic_nav_home));
}
return stateListDrawable;
}
}
ViewBinderUtils.class
public class ViewDataBinderUtils {
Context mContext;
@Inject
public ViewDataBinderUtils(@ActivityContext Context mContext) {
this.mContext = mContext;
}
public List<SlidingPanelData> getListData(String [] titles){
List<SlidingPanelData> items = new ArrayList<>();
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getHomeSelector(),titles[0],true));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getConfigurationSelector(),titles[1],false ));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getConfigurationSelector(),titles[2],false));
items.add(new SlidingPanelData(true));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getQuoteSelector(),titles[3],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getEquipmentInventorySelector(),titles[4],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getCustomerSelector(),titles[5],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getQuoterSelector(),titles[6],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getSalesProgramsSelector(),titles[7],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getCreditAppsSelector(),titles[8],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getRetailOffersSelector(),titles[9],false));
items.add(new SlidingPanelData(true));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getPayOffersSelector(),titles[10],true));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getAlertsSelector(),titles[11],true));
items.add(new SlidingPanelData(true));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getTermofUseSelector(),titles[12],false));
items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getLegalInfoSelector(),titles[11],false));
return items;
}
}
Dziękuję za odpowiedź. Czy muszę wywoływać związane z widokiem rzeczy (widok komunikacji) z klasy prezentera, prawda? – Sunny
Moja klasa modelu ma inny obiekt, który wymaga kontekstu na jego instancję, więc jeśli piszę implementację interaktora od prezentera, który używa kontekstu, to nie jest dobre podejście, prawda? – Sunny
odpowiedź zaktualizowana, daj mi znać, jeśli pomoże :) – rguerra