Eigentlich in meinem Code bin ich ein Tab-Fragment implementieren und im Hinzufügen der ViewPager-Code im Fragment und ich rufe das Fragment aus der Aktivität .. und es funktioniert gut, aber ich muss das zweite fragment manchmal öffnen, also wie kann ich das zweite fragment aus der aktivität laden. Hier ist mein Code:Öffnen Sie das zweite Fragment eines TabFragment aus der Aktivität
public class TabFragment extends Fragment {
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 2;
protected FragmentActivity mActivity;
MyAdapter adapter;
View x;
Offers offersFragment;
public TabFragment() {
// Required empty public constructor
}
public void onBackPressed() {
// do stuff
viewPager.setCurrentItem(0, true);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (FragmentActivity) activity;
}
public void navigateFragment(int position){
viewPager.setCurrentItem(position, true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
x = inflater.inflate(R.layout.content_main_menu, null);
tabLayout = x.findViewById(R.id.tabs);
viewPager = x.findViewById(R.id.viewpager);
setupViewPager(viewPager);
//viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
viewPager.setOffscreenPageLimit(1);
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return x;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
private void setupViewPager(ViewPager viewPager) {
adapter = new MyAdapter(getChildFragmentManager());
adapter.addFragment(new HomeFragment(), "HOME");
adapter.addFragment(new Offers(), "OFFERS");
viewPager.setAdapter(adapter);
}
private class MyAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
}
}
Anruf von der Aktivität:
Log.e("lifecycle", "enter");
fragobjTab = (TabFragment) getSupportFragmentManager().findFragmentById(R.id.containerView);
fragobjTab.navigateFragment();
Logs:
on a null object reference and than crash
und wie kann ich diese Funktion von der Aktivität rufen – techDigi
Sie einen Wert Fragment senden kann aus Aktivität und dann, wenn Sie Viewpager von Fragment einrichten, können Sie die oben genannten Zeilen aufrufen. –