簡體   English   中英

在帶 ViewPager 和不帶 TabLayout 的片段之間滑動

[英]Swipe between fragment with ViewPager and without TabLayout

我有 3 個片段(彼此完全不同)和一個活動(MainActivity)。 我想做的是能夠通過像 TabLayout 這樣的過渡在它們之間滑動(用手指,而不是按鈕)。

據我所見,我可以使用 ViewPager 來完成。 但是問題是ViewPager使用了TabLayout。

有一種方法可以在沒有 TabLayout 的情況下使用 Viewpager 在片段之間滑動嗎?

此代碼將幫助您

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 創建一個適配器。 您將必須擴展 theFragmentPagerAdapter 或 FragmentStatePagerAdapter。 對於本教程,我們將使用 FragmentPagerAdapter。 兩者之間的區別可以在這里找到。 擴展 FragmentPagerAdapter 后,您需要在構造函數中調用 super(FragmentManager) 並實現方法 getItem(position) 和 getCount()。 getItem(position)方法用於返回對應position處的片段,從左到右排序。 所以ChildFragment1會在position 0,ChildFragment2會在position 1,ChildFragment3會在position 2。getCount()方法是統計有多少個Fragments顯示,本例中有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()));
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM