【问题标题】:Swipe between fragment with ViewPager and without TabLayout在带有 ViewPager 和不带 TabLayout 的片段之间滑动
【发布时间】:2020-02-24 12:28:01
【问题描述】:

我有 3 个片段(彼此完全不同)和一个活动(MainActivity)。我想要做的是能够在它们之间滑动(用手指,而不是用按钮),像 TabLayout 这样的过渡。

根据我所看到的,我可以使用 ViewPager 来完成。但问题是 ViewPager 使用了 TabLayout。

有一种方法可以在片段之间滑动,使用 Viewpager,而不需要 TabLayout ?

【问题讨论】:

标签: android android-fragments android-viewpager


【解决方案1】:

此代码将帮助您

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

设置您要显示的子片段。我制作了 3 个子片段,分别称为 ChildFragment1、ChildFragment2 和 ChildFragment3。记得让他们扩展 support.v4.app.fragment。现在为所有三个片段制作布局。我称它们为 child_fragment_1_layout、child_fragment_2_layout 和 child_fragment_3_layout。

public class ChildFragment1 extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.child_fragment_1_layout, container, false);
    Button buttonInFragment1 = rootView.findViewById(R.id.button_1);
    buttonInFragment1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getContext(), "button in fragment 1", Toast.LENGTH_SHORT).show();
        }
    });

    return rootView;
}
}

为 ViewPager 制作一个适配器。您必须扩展 FragmentPagerAdapter 或 FragmentStatePagerAdapter。对于本教程,我们将使用 FragmentPagerAdapter 。两者之间的区别可以在这里找到。扩展 FragmentPagerAdapter 后,您需要在构造函数中调用 super(FragmentManager) 并实现 getItem(position) 和 getCount() 方法。 getItem(position)方法用于返回对应位置的fragment,从左到右排序。所以 ChildFragment1 将在位置 0,ChildFragment2 将在位置 1,ChildFragment3 将在位置 2。getCount() 方法是计算要显示的 Fragment 的数量,在这种情况下,有 3 个。

public class ViewPagerAdapter extends FragmentPagerAdapter {

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    switch (position)
    {
        case 0:
            return new ChildFragment1(); //ChildFragment1 at position 0
        case 1:
            return new ChildFragment2(); //ChildFragment2 at position 1
        case 2:
            return new ChildFragment3(); //ChildFragment3 at position 2
    }
    return null; //does not happen
}

@Override
public int getCount() {
    return 3; //three fragments
}
}

现在在 MainActivity 中找到您的 ViewPager 并调用 setAdapter() 方法并传入您的自定义适配器。如果您在另一个片段(嵌套片段)中执行此操作,则必须改为在适配器的参数中传递 getChildFragmentManager()。现在你的 ViewPager 已经设置好了

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ViewPager viewPager = findViewById(R.id.view_pager);
    viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
}
}

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多