我有3个片段(彼此完全不同)和一个活动(MainActivity)。我想做的就是能够像TabLayout这样的过渡在它们之间滑动(用手指而不是按钮)。
根据我所看到的,我可以使用ViewPager来完成。但是问题是ViewPager使用TabLayout。
有一种方法可以使用Viewpager在不使用TabLayout的情况下在片段之间滑动?
答案 0 :(得分:-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)方法用于返回从左到右排序的相应位置处的片段。因此,ChildFragment1将位于位置0,ChildFragment2将位于位置1,ChildFragment3将位于位置2。getCount()方法用于计算要显示的片段数量,在这种情况下为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()));
}
}