【问题标题】:How to start a fragment into the viewpager from Activity?如何从 Activity 将片段启动到 viewpager?
【发布时间】:2019-03-16 07:10:18
【问题描述】:

我有一个活动和一个带有两个片段的 ViewPager。我想通过活动启动片段。我该怎么做?

【问题讨论】:

标签: android android-activity android-viewpager fragment


【解决方案1】:

在 Activity 布局中创建 ViewPager选项卡布局(如果您需要选项卡)

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

别忘了在片段类中添加一个空的构造函数


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

}

【讨论】:

  • 不,我想启动存在一个带有两个片段的 viewpager 的活动。所以我想开始活动并移动到特定的片段。
  • 你的意思是要在activity创建的时候启动一个特定的fragment?
  • 是的,例如,在 MainActivity 的 viewpager 中启动一个特定的片段,我想启动另一个活动的片段 (SecoundActivity)
  • 检查更新的答案。我已在答案末尾添加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多