#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()
значение null2. когда я перехожу на определенную страницу, используя ViewPager.setCurrentItem(0); но другие данные исчезнут, как вернуть вставленные данные обратно на определенную страницу
3. Вы имеете в виду, что при изменении текущей страницы значения с других (или некоторых) страниц теряются? Если да, это связано с тем, что страницы воссоздаются. Итак, вы должны сохранить
editText
значения где-нибудь, прежде чем менять страницу. Затем получите эти значения вinstantiateItem
функции.4. Немного сложно объяснить это в комментарии. Лучше использовать массив
class
вместо массиваint
. Этот класс может иметь 2 переменные, идентификатор макета и строку. Затем, вonClick
случае, если вы можете сохранитьeditText
значение в строке перед изменением страницы. ВinstantiateItem
вы можете сбросить edittext с помощью этой сохраненной строки. Если это недостаточно ясно, лучше задайте другой вопрос, чтобы его можно было четко записать.
Ответ №2:
Используйте шаблон MVP или, по крайней мере, сделайте Presenter part / something для хранения данных (отдельно для каждого фрагмента), а затем получите ваши данные из них позже. Если вы не уверены, как это сделать, спросите себя, как вы справляетесь с ориентацией экрана (возможно, у вас уже есть что-то для этого, поэтому попробуйте использовать его) (не говоря уже о onSaveInstanceState()) .