У меня есть активность и ViewPager с двумя фрагментами. Я хочу запустить фрагменты через активность. Как мне это сделать?
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));
}
Нет, я хочу запустить действие, которое существует на странице просмотра с двумя фрагментами. Итак, я хочу начать действие и перейти к конкретному фрагменту.
Вы имеете в виду, что хотите запустить определенный фрагмент в действии при его создании?
да, запустите определенный фрагмент, который находится на странице просмотра в MainActivity, например, и я хочу запустить фрагмент другого действия (SecondActivity)
проверьте обновленный ответ. Я добавил в конце ответа
Попробовали документацию developer.android.com/training/animation/screen-slide