Как проверить все экраны в view pager на последней странице для всех экранов edittext?

#android #android-viewpager

#Android #android-viewpager

Вопрос:

Я хочу установить проверку на последнем экране, чтобы все данные, просмотренные на экранах, были вставлены пользователем или не использовались viewpager.

класс pageradapter

 public class MyViewPagerAdapter extends PagerAdapter {
    private LayoutInflater layoutInflater;
    private Context context;
    private int[] layouts;

    public MyViewPagerAdapter(Context context,int[] layouts) {
        this.context=context;
        this.layouts=layouts;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View view = layoutInflater.inflate(layouts[position], container, false);
        container.addView(view);

        return view;
    }

    @Override
    public int getCount() {
        return layouts.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object obj) {
        return view == obj;
    }


    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        View view = (View) object;
        container.removeView(view);
    }
  

добавление макетов в viewpager в activities oncreate метод

 layouts = new int[]{
                R.layout.welcome_side1,
                R.layout.welcome_side2,
                R.layout.welcome_side3,
                R.layout.welcome_side4};

        // making notification bar transparent
        changeStatusBarColor();

        myViewPagerAdapter = new MyViewPagerAdapter(context,layouts);
        viewPager.setAdapter(myViewPagerAdapter);
        viewPager.addOnPageChangeListener(viewPagerPageChangeListener);
  

нажмите кнопку в действии, которое я хочу проверить здесь, о моем первом экране edittext

 btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int current = getItem( 1);
                if (current < layouts.length) {
                    // move to next screen
                    viewPager.setCurrentItem(current);
                } else {
                    //i want to validate here about my all layout files empty fields or user insert correct valuers.
                }
            }
        });
  

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

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_screen1">

    <EditText
        android:id="@ id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@ id/linearlayout1"
        android:layout_marginBottom="40dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name" />
</RelativeLayout>
  

Ответ №1:

Попробуйте сделать это так

 btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int current = getItem( 1);
            if (current < layouts.length) {
                // move to next screen
                viewPager.setCurrentItem(current);
            } else {
                for (int i = 0; i < viewPager.getChildCount(); i  ) {
                   View v = viewPager.getChildAt(i);
                   EditText ed = v.findViewById(R.id.editText);
                   if (ed != null) {
                       if (ed.getText() == null || ed.getText().toString().equals("")) {
                             // here text is empty, do something...
                           return;
                       }
                    }
                }
                // here, all edittext were edited, do something
            }
        }
    });
  

Комментарии:

1. Смотрите мой отредактированный ответ. Просто проверьте, равно ли getText() значение null

2. когда я перехожу на определенную страницу, используя ViewPager.setCurrentItem(0); но другие данные исчезнут, как вернуть вставленные данные обратно на определенную страницу

3. Вы имеете в виду, что при изменении текущей страницы значения с других (или некоторых) страниц теряются? Если да, это связано с тем, что страницы воссоздаются. Итак, вы должны сохранить editText значения где-нибудь, прежде чем менять страницу. Затем получите эти значения в instantiateItem функции.

4. Немного сложно объяснить это в комментарии. Лучше использовать массив class вместо массива int . Этот класс может иметь 2 переменные, идентификатор макета и строку. Затем, в onClick случае, если вы можете сохранить editText значение в строке перед изменением страницы. В instantiateItem вы можете сбросить edittext с помощью этой сохраненной строки. Если это недостаточно ясно, лучше задайте другой вопрос, чтобы его можно было четко записать.

Ответ №2:

Используйте шаблон MVP или, по крайней мере, сделайте Presenter part / something для хранения данных (отдельно для каждого фрагмента), а затем получите ваши данные из них позже. Если вы не уверены, как это сделать, спросите себя, как вы справляетесь с ориентацией экрана (возможно, у вас уже есть что-то для этого, поэтому попробуйте использовать его) (не говоря уже о onSaveInstanceState()) .