Android проблема с видоискателем во фрагменте - PullRequest
0 голосов
/ 13 сентября 2018

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

Сначала я создаю упражнение с 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);
}

И в одном из фрагментов я создаю панель просмотра для создания моего слайдера.

<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, но это не решило мою проблему. Вот почему мне нужна ваша помощь;)

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

...