I am trying to inject a FragmentManager and the associated fragments but
the OnCreateView of the fragments inside tablayout is never called.Also,
manager.getFragments().isEmpty() returns true;
MainActivityModule:
@Module
public class MainActivityModule {
@Provides
static FragmentManager getFragmentManager(MainActivity mainActivity) {
return mainActivity.getSupportFragmentManager();
}
@Provides
ViewPagerAdapter getViewPagerAdapter(FragmentManager fragmentManager){
return new ViewPagerAdapter(fragmentManager);
}
@Provides
static FragmentOne getFragmentOne(){
return FragmentOne.newInstance();
}
@Provides
static FragmentTwo getFragmentTwo(){
return FragmentTwo.newInstance();
}
@Provides
static FragmentThree getFragmentThree(){
return FragmentThree.newInstance();
}
}
AppModule:
@Module
public abstract class AppModule {
@ContributesAndroidInjector(modules = MainActivityModule.class)
abstract MainActivity mainActivity();
@Provides
@Singleton
static Context getContext(Application application){
return application.getApplicationContext();
}
@Provides
@Singleton
static MainActivity getMainActivity(){
return new MainActivity();
}
}
AppComponent:
@Singleton
@Component(modules = {MainActivityModule.class, AppModule.class})
public interface AppComponent {
void inject(MainActivity mainActivity);
@Component.Builder
interface Builder {
AppComponent build();
@BindsInstance
Builder buildapp(Application application);
}
}
MainActivity:
public class MainActivity extends AppCompatActivity {
@Inject
Context context;
@Inject
FragmentManager fragmentManager;
@Inject
ViewPagerAdapter viewPagerAdapter;
@Inject
FragmentOne fragmentOne;
@Inject
FragmentTwo fragmentTwo;
@Inject
FragmentThree fragmentThree;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyTabApplication.getAppComponent().inject(this);
ViewPager viewPager = findViewById(R.id.pager);
viewPagerAdapter.addFragment(fragmentOne, "Frag1");
viewPagerAdapter.addFragment(fragmentTwo, "Frag2");
viewPagerAdapter.addFragment(fragmentThree, "Frag3");
viewPager.setAdapter(viewPagerAdapter);
TabLayout tabLayout = findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
}
class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
@Inject
ViewPagerAdapter(FragmentManager manager) {
super(manager);
Log.d("manager", "" + manager.getFragments().isEmpty());
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return 3;
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
FragmentOne(all other fragments are similar):
public class FragmentOne extends Fragment {
public FragmentOne(){
Log.d("Fragmentone","one");
}
public static FragmentOne newInstance(){
return new FragmentOne();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
Log.d("Fragmentonecons","one");
return inflater.inflate(R.layout.fragment_one,container,false);
}
}
--
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit
https://groups.google.com/d/msgid/android-developers/60527b82-1261-4916-9bf1-168c4df5c387%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.