Проблема Android с viewpager во фрагменте

Я пытаюсь создать слайдер для приложения. Но у меня с этим проблемы.

Сначала я создаю действие с 3 фрагментами.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);

        bottomNavigationView.setOnNavigationItemSelectedListener
                (new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        Fragment selectedFragment = null;
                        switch (item.getItemId()) {
                            case R.id.action_item1:
                                selectedFragment = Statistique.newInstance();
                                break;
                            case R.id.action_item2:
                                selectedFragment = Acceuil.newInstance();
                                break;
                            case R.id.action_item3:
                                selectedFragment = Investisseur.newInstance();
                                break;
                        }
                        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                        transaction.replace(R.id.frame_layout, selectedFragment);
                        transaction.commit();
                        return true;
                    }
                });
        //Manually displaying the first fragment - one time only
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, Acceuil.newInstance());
        transaction.commit();

        //Used to select an item programmatically
        bottomNavigationView.getMenu().getItem(1).setChecked(true);
}

И в одном из фрагментов я создаю viewpager, чтобы сделать свой слайдер.

<android.support.v4.view.ViewPager
        android:id = "@+id/viewPager"

        android:layout_width = "0dp"
        android:layout_height = "0dp"
        android:layout_marginEnd = "15dp"
        android:layout_marginLeft = "15dp"
        android:layout_marginRight = "15dp"
        android:layout_marginStart = "15dp"
        app:layout_constraintBottom_toTopOf = "@+id/button3"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "0.0"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/view" />

Во фрагменте Acceuil.java

public class Acceuil extends Fragment {

    public Acceuil() {
        // Required empty public constructor
    }

    // TODO: Rename and change types and number of parameters
    public static Acceuil newInstance() {
        Acceuil fragment = new Acceuil();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_acceuil, container, false);
        ViewPager viewPager = view.findViewById(R.id.viewPager);
        Log.d("myTag", "Start to go in DotIndicatorPagerAdapter");
        viewPager.setAdapter(new DotIndicatorPagerAdapter());
        Log.d("myTag", "Stop to go in DotIndicatorPagerAdapter");
        return inflater.inflate(R.layout.fragment_acceuil, container, false);
    }

    public void sendToContact(View view) {
        Intent intent = new Intent(getContext(), Contact.class);
        startActivity(intent);
    }

    public void sendToAutorisation(View view) {
        Intent intent = new Intent(getContext(), Autorisation.class);
        startActivity(intent);
    }
}

Я создаю класс расширения PagerAdapter, чтобы получить настраиваемый Viewpager.

public class DotIndicatorPagerAdapter extends PagerAdapter {
    private static final List<Integer> items =
            Arrays.asList(R.layout.material_page1, R.layout.material_page2, R.layout.material_page3);

    @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) {
        Log.d("myTag", "Passed into THE function");
        View item = LayoutInflater.from(container.getContext())
                .inflate(items.get(position), container, false);
        container.addView(item);
        return item;
    }

    @Override public int getCount() {
        return items.size();
    }

    @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        Log.d("myTag", "Passed into isViewFromObject");
        return view == object;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        Log.d("myTag", "Passed into destroyItem");
        container.removeView((View) object);
    }
}

Проблемы возникают сейчас, когда я запускаю код, я могу выполнить действие с 3 фрагментами, но слайдер в фрагменте не был создан, я пытаюсь отладить его с помощью некоторой печати и вижу, что он не вошел в instantiateItem.

Я на нем с 1 дня, я пытался найти решение в Google, но это не решило мою проблему. Вот почему мне нужна ваша помощь;)

Обновлено: Я провел несколько новых тестов, и мне удалось заставить его работать с помощью окна просмотра в Activity, но он не работает, когда я пробую его с помощью окна просмотра во фрагменте.

почему бы не сделать ViewPager вкладками, с вкладками внизу? также не создавайте экземпляры этих фрагментов снова и снова.

Martin Zeitler 13.09.2018 11:16

Я могу попробовать это, но сначала я хочу знать, почему программа не попала в instantiateItem.

M.Gernath 13.09.2018 11:28

... что PagerAdapter даже не имеет конструктора по умолчанию. а без конструктора он может вообще не быть построен. раздувание представлений внутри адаптера также кажется мне странным, потому что это едва ли является обязанностью адаптера.

Martin Zeitler 13.09.2018 11:43

Я новичок в Java и Android, поэтому я полностью заблудился: p Но я создаю то же самое в действии, и оно работает. Теперь я пытаюсь заставить его работать фрагментарно.

M.Gernath 13.09.2018 12:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
74
0

Другие вопросы по теме