как вызвать фрагмент из главного класса (appCompatActivity)

У меня есть основной класс и более 3 классов фрагментов, когда я вызываю фрагмент из основного он не работает. Как я могу вызвать фрагмент в основном классе, который расширен из appCompacAtivity? я пробовал много вещей, но все еще сталкивается с той же проблемой, пожалуйста, помогите мне… Вот мой код ниже…Заранее спасибо

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

TabLayout tabLayout;
ViewPager viewPager;

ViewPagerAdapter viewPagerAdapter;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    tabLayout = (TabLayout)findViewById(R.id.tablayout);
    viewPager = (ViewPager)findViewById(R.id.viewPager);
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragments(new HomeFragment(),"Welcome");
    viewPagerAdapter.addFragments(new DealsFragment(), "Deals");
    viewPagerAdapter.addFragments(new MakemydateFragment(), "Make My Day");
    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);


}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    FragmentManager fr = getFragmentManager();
    FragmentTransaction ft = fr.beginTransaction();
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        // Handle the camera action
    } else if (id == R.id.nav_deals) {

       // Intent intent = new Intent(getApplicationContext(), DealsFragment.class); // here i want to call fragment class
       // startActivity(intent);
       // ft.replace(R.id.container, DealsFragment.class);
       // ft.commit();


    } else if (id == R.id.nav_knowledgezone) {

    } else if (id == R.id.nav_makemyday) {

    } else if (id == R.id.nav_specials){

    } else if (id == R.id.nav_account) {

    } else if (id == R.id.nav_settings) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}



}

public class DealsFragment extends Fragment {

private PagerAdapter mPagerAdapter;


public DealsFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_deals, container, false);
    ViewPager pager = (ViewPager) view.findViewById(R.id.viewPager2);


    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(getActivity(), ImageOneDeals.class.getName()));
    fragments.add(Fragment.instantiate(getActivity(), ImageTwoDeals.class.getName()));
    fragments.add(Fragment.instantiate(getActivity(), ImageThreeDeals.class.getName()));

    mPagerAdapter = new ImagePagerAdapter(getChildFragmentManager(), fragments);

    pager.setAdapter(mPagerAdapter);

    return view;
}

}                                

1 ответ

  1. Если вы хотите вызвать какой-либо метод fragmentиз действия, то сделайте это.

    Создайте объект fragmentкласса и вызовите метод.

       RegFragment fragment = (RegFragment) adapter.getFragment(1);
            fragment.onRegError(response);