Ich versuche, Mortar & Flow in meiner App und konfrontiert mit einem Problem, dass ich nicht SeiteAdapter mit Bildschirmen statt Fragmente arbeiten kann.Mörtel und Flow-Bibliotheken vs ViewPager
Wer hat es richtig hinbekommen?
ist mir nicht gelungen, aber wahrscheinlich jemand mich von diesem Punkt führen kann:
Der anfängliche Dolch Anmeldung:
@Module(
injects = {
MainActivity.class,
},
library = true,
complete = false
)
public class DaggerConfig {
@SuppressWarnings("unused")
@Provides @Singleton Gson provideGson() {
return new GsonBuilder().create();
}
}
Mainscreen, dessen Ansicht präsentiert ViewPager:
@Layout(R.layout.screen_main) @WithModule(MainScreen.Module.class)
public class MainScreen extends Path {
@dagger.Module(injects = MainView.class, addsTo = DaggerConfig.class)
public static class Module {}
@Singleton
public static class Presenter extends ViewPresenter<MainView> {
@Inject
public Presenter() {}
}
}
Hauptansicht:
...........
@Inject
MainScreen.Presenter presenter;
...........
@Override protected void onFinishInflate() {
super.onFinishInflate();
ButterKnife.inject(this);
final Path[] screens = {
new SubScreen("1"),
new SubScreen("2"),
new SubScreen("3"),
};
CustomPagerAdapter customPagerAdapter = new CustomPagerAdapter(getContext(), screens);
customPagerAdapter .setAdapter(firstRunPagerAdapter);
}
.....
Nun der Hauptteil, SUBSCREEN (3 ähnliche Bildschirme, die sich nur durch die Parameter in ihnen sind wir vorbei => sie sollten Ansichten anpassen diese Parameter entsprechend)
@Layout(R.layout.screen_subscreen) @WithModule(SubScreen.Module.class)
public class SubScreen extends Path {
private final String title;
public SubScreen(String titleParam) {
title = titleParam;
}
@dagger.Module(injects = SubView.class, addsTo = DaggerConfig.class)
public class Module {
@Provides
SubViewMetadata provideSubViewMetadata() {
return new SubViewMetadata(backgroundColor, title);
}
}
@Singleton
public static class Presenter extends ViewPresenter<SubView> {
private String title;
@Inject
public Presenter(String title) {
this.title= title;
}
@Override
protected void onLoad(Bundle savedInstanceState) {
super.onLoad(savedInstanceState);
if (!hasView()) {
return;
}
getView().setTitle(subViewMetadata.title);
}
}
}
und es ist Sicht public class SubView erstreckt FrameLayout {
@InjectView(R.id.subViewTitleTextView)
TextView subViewTitleTextView;
@Inject
SubScreen.Presenter presenter;
public SubView(Context context, AttributeSet attrs) {
super(context, attrs);
ObjectGraphService.inject(context, this);
}
public void setTitle(String title) {
subViewTitleTextView.setText(title);
}
@Override protected void onAttachedToWindow() {....}
@Override protected void onDetachedFromWindow() {....}
......
}
Benutzerdefinierte Pager-Adapter:
public class CustomPagerAdapter extends PagerAdapter {
private final Context context;
private final Path[] screens;
public CustomPagerAdapter(Context context, Path[] screens) {
this.context = context;
this.screens = screens;
}
@Override
public int getCount() {
return (screens == null)? 0 : screens.length;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view.equals(o);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Path screen = screens[position];
MortarScope originalScope = MortarScope.getScope(context);
MortarScope newChildScope = originalScope.buildChild().build("tutorialpage" + position);
Context childContext = newChildScope.createContext(context);
View newChild = Layouts.createView(childContext, screen);
container.addView(newChild);
return newChild;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
View view = ((View) object);
container.removeView(view);
MortarScope.getScope(view.getContext()).destroy();
}
}
Die Problembeschreibung: Es stürzt ab, da die SubView-Klasse nicht in der Liste der Injektionen in der "Layouts.createView (childContext, Bildschirm)" hinzugefügt wurde; Moment im Adapter, und ich kann es nicht standardmäßig hinzufügen, weil ich einen @provider von Daten von Subscreen zu Subscreen.Presenter haben möchte. (Ich benutze lokale Variable.
Wenn ich SubView.class in die Liste der Injektionen hinzufügen und lokale Screen Variablen in statische konvertieren, dann habe ich 3 identische Seiten innerhalb des ViewPager (was logisch ist, wie jeder nächster Aufruf des Konstruktors.? - Überschreibungen alte statische Variablen)
Jede Hilfe/Ideen Danke für Ihre Hilfe, Konstantin
Bitte erläutern Sie ganz und genau, was "es nicht geschafft hat, es zum Laufen zu bringen" bedeutet. – CommonsWare
@CommonsWare hi, es bedeutet, dass das Schnipsel von oben veraltet ist und nicht mit aktuellen Versionen von Flow & Mortar funktioniert, d. H. –
d. H. Die Frage ist meistens, wie man einen Bildschirm bekommt, um eine Ansicht für diesen Bildschirm zu erhalten. Ich denke, das ist jetzt mein größtes Problem. –