Проведите между фрагментом с ViewPager и без TabLayout - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть 3 фрагмента (полностью отличающихся друг от друга) и одно действие (MainActivity). То, что я хотел бы сделать, это иметь возможность проводить пальцем между ними (пальцем, а не кнопками) с переходом, как TabLayout.

Согласно тому, что я видел, я могу сделать это с помощью ViewPager. Но проблема в том, что ViewPager использует TabLayout.

Есть ли способ провести между фрагментами, используя Viewpager, без TabLayout?

1 Ответ

0 голосов
/ 24 февраля 2020

Этот код поможет вам

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) используется для возврата фрагмента в соответствующую позицию, упорядоченную слева направо. Поэтому ChildFragment1 будет в позиции 0, ChildFragment2 будет в позиции 1, а ChildFragment3 будет в позиции 2. Метод getCount () предназначен для подсчета количества отображаемых фрагментов, и в данном случае их 3. 3. 1014 *

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
}
}

Теперь найдите ваш ViewPager в MainActivity, вызовите метод 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()));
}
}
...