#java #android #dynamic #input
#java #Android #динамический #ввод
Вопрос:
Я хочу собрать информацию о пользователе. Допустим, я хочу собрать информацию, такую как возраст и пол, для каждого из членов их семьи.
Как я мог это сделать в форме, учитывая, что я не знаю размер их семейства, чтобы при появлении запроса они могли ввести количество членов семейства. На который теперь отображается экран, форма, подобная списку с членом семьи 1:
Возраст:
Пол:
Член семьи 2:
возраст
, пол
и так далее. Я хотел бы получить один большой список, чтобы вы могли прокручивать приложение вниз, чтобы ввести всю информацию. И кнопка отправки в конце отправит мне форму. Я просто не знаю, как обрабатывать неизвестное количество форм EditText и т. Д. И как затем извлекать информацию из каждой.
Если бы вы могли показать мне, как это сделать с помощью некоторых фрагментов кода.
Ответ №1:
Существует много разных способов, я упомяну один из них:
-Начните с создания макета EditText и кнопки. Для размера семейного вопроса -Макет только с ViewPager -Макет для фрагментации, как вы хотите, чтобы форма выглядела, например, 2 EditText (возраст и пол) и 1 кнопка
-Создайте фрагмент.Класс Java и раздуть макет фрагмента внутри него
Теперь в вашем основном действии установите первый макет с размером макета семейства.
например, он вводит 4.
теперь откройте новое действие с макетом ViewPager в качестве содержимого.
int size = 4;
ArrayList<Fragments> lf = new ArrayList<Fragment>();
Создайте фрагменты с помощью цикла
for(int count;0 count<size; count ){
Fragment f = new Fragment();
lf.add(f);
}
Теперь создайте PagerAdapter, передав ему «lf»
вы можете соответствующим образом задать текст для каждой кнопки
String Text;
if(pagenumber == size-1) //means last page
text= "finish";
else
text = "next";
затем
button.setText(text);
ОБНОВЛЕНИЕ ДЛЯ УТОЧНЕНИЯ
- FirstFragment.xml в форме должно быть то, что вы хотите (2 редактируемых текста и 1 кнопка).
- main_pager.xml имеет только ViewPager
- Создайте свой mainActivity.java Класс с
setContentView(R.layout.main_Pager);
- В вашем onCreate() Вы находите свой ViewPager и передаете экземпляр ViewPager.
- После этого выполните описанный выше цикл, как я объяснил, в зависимости от размера семейства
-
теперь вызовите setAdapter на ViewPager . пример:
vPager.setAdapter(new FragmentAdapter(getFragmentManager(), lf));
-
Вот ваш класс FragmentAdapter.
public class FragmentAdapter extends FragmentPagerAdapter{ private List<Fragment> fragments; public FragmentAdapter (FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public Fragment getItem(int position) { return this.fragments.get(position); } @Override public void destroyItem (ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); } @Override public int getCount() { return this.fragments.size(); } }
Комментарии:
1. Привет, Мо Адель, спасибо за вашу помощь! Мне просто нужно прояснить несколько вещей. Итак, я создал все макеты и FirstFragment.java файл, который увеличил макет ViewPager. У меня есть действие, которое получает от пользователя количество членов семейства, однако я немного смущен циклом фрагментов и создаю PagerAdapter, передающий ему lf. Итак, если у меня есть FirstFragment.java файл, что должно быть в моем FirstFragment.java файл, чтобы я мог перебирать фрагменты. И извлекать данные?
2. Спасибо за обновление, однако я сделал свой FragmentAdapter, как вы указали. Должен ли я помещать этот цикл и т. Д. В onCreate () моего mainactivity.java класс? Я получаю только несколько ошибок с помощью vPager.setAdapter(new FragmentAdapter(getFragmentManager(), lf)); Эта строка кода. Также с предоставлением экземпляра, как именно мне это сделать? Извините, я очень новичок в этом. И эта конкретная ситуация меня действительно раздражает. Возможно, вы хотели бы помочь мне по электронной почте или что-то в этом роде? Мне очень жаль, но я бы хотел прояснить это! Спасибо за вашу помощь.
3. что касается вашего первого вопроса, да, вы должны добавить его в onCreate в MainActivity.java . можете ли вы сообщить мне, какие ошибки возникают для vPager.setAd……
4. Поэтому, когда я копирую ваш класс FragmentAdaptor, я получаю эту ошибку Неявный суперконструктор FragmentPagerAdapter() не определен для конструктора по умолчанию. Необходимо определить явный конструктор в объявлении класса. Затем он жалуется на super (fm); однако я уверен, что это не первая строка в конструкторе. В строке ArrayList должны быть оба ArrayList<Фрагменты> lf …. В ArrayList<Fragment> есть «Фрагмент», а не один с множественным числом? vPager.set .. выдает ошибку «Конструктор FragmentAdapter(FragmentManager, ArrayList<Фрагмент>) не определен». Еще раз спасибо за вашу помощь
5. ViewPager vp = (ViewPager) findViewById(R.id.ViewPager); vp.setAdapter(null); Так ли я должен найти свой ViewPager и передать его экземпляру ViewPager? Теперь все вещи действительно должны быть в «MainActivity», поскольку у меня уже есть основное действие, выполняющее другие вещи. Я использую другое действие для вызова всего этого, которое я вызвал FirstFragment.java но да, я почти уверен, что это тот же принцип. Я хочу, чтобы фрагменты появлялись только тогда, когда я собираю эти данные, в другом месте от моей MainActivity. Есть ли у вас адрес электронной почты, чтобы я мог отправить вам свой текущий код для дальнейшей помощи?