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

#android #android-activity #android-viewpager #fragment

#Android #android-активность #android-viewpager #фрагмент

Вопрос:

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

Комментарии:

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

Ответ №1:

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

В вашем классе activity внутри onCreate()
инициализируйте этот viewpager

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

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


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

Поместите это в свою activity, которая запускает 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);
  

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

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

}
  

Комментарии:

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

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

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

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