मैं अपने ऐप में मोर्टार & प्रवाह को अनुकूलित करने की कोशिश कर रहा हूं और किसी समस्या का सामना कर रहा हूं, कि मैं पेजएडाप्टर को टुकड़ों के बजाय स्क्रीन के साथ काम नहीं कर सकता।मोर्टार और फ्लो लाइब्रेरी बनाम व्यूपर
कोई भी इसे सही करने में कामयाब रहा?
मैं सफल नहीं हुआ लेकिन, शायद किसी ने मुझे इस बिंदु से मार्गदर्शन कर सकते हैं:
प्रारंभिक डैगर पंजीकरण:
@Module(
injects = {
MainActivity.class,
},
library = true,
complete = false
)
public class DaggerConfig {
@SuppressWarnings("unused")
@Provides @Singleton Gson provideGson() {
return new GsonBuilder().create();
}
}
MainScreen, जिसका देखें होस्ट कर रहा है 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() {}
}
}
मुख्य दृश्य:
...........
@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);
}
.....
अब
, मुख्य हिस्सा, SubScreen (3 समान स्क्रीन, कि केवल मानकों हम उन्हें में गुजर रहे हैं के आधार पर भिन्न => वे इन मानकों के अनुसार विचारों का समायोजन करना चाहिए)
@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);
}
}
}
और यह दृश्य सार्वजनिक वर्ग है subview फैली 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() {....}
......
}
कस्टम पेजर अनुकूलक:
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();
}
}
समस्या कथन: यह क्रैश हो रहा है, क्योंकि सबव्यू क्लास को "लेआउट्स.क्रेटव्यू (बालकेंटेक्स्ट, स्क्रीन) पर इंजेक्शन की सूची में जोड़ा नहीं गया है;" एडाप्टर में पल, और मैं इसे डिफ़ॉल्ट रूप से नहीं जोड़ सकता, क्योंकि मैं उपस्क्रीन से उपस्क्रीन में डेटा का @ प्रोविडर होना चाहता हूं। प्रतिनिधि। (मैं स्थानीय चर का उपयोग कर रहा हूँ।
तो मैं इंजेक्शन की सूची में SubView.class जोड़ सकते हैं और स्थिर में स्थानीय स्क्रीन के चर कनवर्ट करते हैं, तो मैं ViewPager (जो तार्किक है अंदर 3 समान पृष्ठों होगा, हर रूप में निर्माता की अगली कॉल -।? ओवरराइड वर्ष स्थैतिक चर)
किसी भी मदद/विचारों आपकी मदद के लिए धन्यवाद, Konstantin
कृपया समझाएं, पूरी तरह से और सटीक, क्या "इसे काम करने में कामयाब नहीं है" का अर्थ है। – CommonsWare
@ कॉमन्सवेयर हाय, इसका मतलब है कि ऊपर से स्निपेट पुराना है और फ्लो एंड मोर्टार के वर्तमान संस्करणों के साथ काम नहीं करता है, दुर्भाग्य से –
यानी सवाल यह है कि इस स्क्रीन के लिए एक स्क्रीन प्राप्त करने के लिए स्क्रीन कितनी है। मुझे लगता है कि अब यह मेरा सबसे बड़ा मुद्दा है। –