Как запустить фрагмент в ViewPager из Activity? - PullRequest
0 голосов
/ 16 марта 2019

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

1 Ответ

0 голосов
/ 16 марта 2019

Создайте ViewPager и макет вкладки (если вам нужна вкладка) внутри макета Activity

    <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" />

Создайте 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);
    }
}

В вашем классе активности внутри onCreate () инициализировать это представление пейджер

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);

Если вы используете вкладки, добавьте их тоже.

            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();
            }
        });

Не забудьте добавить пустой конструктор внутри класса фрагмента


Чтобы запустить определенный фрагмент внутри действия

Поместите это в свою деятельность, которая начинает действие с фрагментами

    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));

}
...