Как запустить фрагмент в viewpager из Activity?

У меня есть активность и ViewPager с двумя фрагментами. Я хочу запустить фрагменты через активность. Как мне это сделать?

Попробовали документацию developer.android.com/training/animation/screen-slide

Srikar Reddy 16.03.2019 08:29
1
1
38
1

Ответы 1

Create a ViewPager and a Tab layout (if you need a tab)inside your Activity layout

    <android.support.design.widget.TabLayout
    android:id = "@+id/tabLayout"
    android:layout_below = "@+id/toolbar"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:background = "@color/colorPrimary"
    android:elevation = "10dp"
    android:minHeight = "?attr/actionBarSize"
    app:tabGravity = "fill"
    app:tabMode = "fixed"
    app:tabIndicatorColor = "@color/green2"
    app:tabIndicatorHeight = "4dp"
    app:tabIndicatorGravity = "top"
    app:tabSelectedTextColor = "#FFFFFF"
    app:tabTextColor = "#555050" />

    <android.support.v4.view.ViewPager
    android:id = "@+id/viewPager"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:layout_below = "@+id/tabLayout" />

Create a ViewpageAdapter

    public class ViewPagerAdapter extends FragmentPagerAdapter {

    String[] names = new String[2];
    List<Fragment> fragmentList = new ArrayList<>();
    List<String> fragmentTitles = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
        names[0] = "Fragment One";
        names[1] = "Fragment Two";
    }

    @Override
    public Fragment getItem(int i) {

        return fragmentList.get(i);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {

        return fragmentTitles.get(position);
    }

    public void addFragments(Fragment fragment, String title) {

        fragmentList.add(fragment);
        fragmentTitles.add(title);
    }
}

In your activity class inside onCreate()
initialize this view pager

viewPager = findViewById(R.id.viewPager);
            viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
     //adding fragments to page
                viewPagerAdapter.addFragments(new Fragment1Class(), getResources().getString(R.string.tab1Name));
                viewPagerAdapter.addFragments(new Fragment2Class(), getResources().getString(R.string.tab2Name));

                //setUp
                viewPager.setAdapter(viewPagerAdapter);
                tabLayout = findViewById(R.id.tabLayout);
            tabLayout.setupWithViewPager(viewPager);

If you are using tabs, add these too.

            tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                selectedTabPosition = getTabSelected();
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

                selectedTabPosition = getTabSelected();
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

                selectedTabPosition = getTabSelected();
            }
        });

Don't forget to add an empty constructor inside the fragment class


To start a specific fragment inside the activity

Поместите это в свою активность, которая запускает активность с фрагментами

    int fragOne=1;
int fragTwo=2;

Intent intent = new Intent(getBaseContext(), MainActivity.class);

//sending data to MainActivity
Bundle extras=new Bundle();
extras.putInt("fragmentId",fragOne);
intent.putExtras(extras);
startActivity(intent);

Внутри вашей активности с фрагментами

//getting data
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if (bundle!=null) {
 int fragId=bundle.getInt("fragmentId");
}
if (fragmentId==1) {
    viewPagerAdapter.addFragments(new fragment1Class(), getResources().getString(R.string.tab1Name));
}else if (fragmentId==2) {
    viewPagerAdapter.addFragments(new fragment2Class(), getResources().getString(R.string.tab1Name));

}

Нет, я хочу запустить действие, которое существует на странице просмотра с двумя фрагментами. Итак, я хочу начать действие и перейти к конкретному фрагменту.

Hasan Cheraghi 16.03.2019 08:28

Вы имеете в виду, что хотите запустить определенный фрагмент в действии при его создании?

Lenzman 16.03.2019 08:30

да, запустите определенный фрагмент, который находится на странице просмотра в MainActivity, например, и я хочу запустить фрагмент другого действия (SecondActivity)

Hasan Cheraghi 16.03.2019 08:35

проверьте обновленный ответ. Я добавил в конце ответа

Lenzman 16.03.2019 08:43

Другие вопросы по теме