#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. проверьте обновленный ответ. Я добавил в конце ответа