Динамические формы пользовательского ввода

#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);
  

ОБНОВЛЕНИЕ ДЛЯ УТОЧНЕНИЯ

  1. FirstFragment.xml в форме должно быть то, что вы хотите (2 редактируемых текста и 1 кнопка).
  2. main_pager.xml имеет только ViewPager
  3. Создайте свой mainActivity.java Класс с setContentView(R.layout.main_Pager);
  4. В вашем onCreate() Вы находите свой ViewPager и передаете экземпляр ViewPager.
  5. После этого выполните описанный выше цикл, как я объяснил, в зависимости от размера семейства
  6. теперь вызовите setAdapter на ViewPager . пример: vPager.setAdapter(new FragmentAdapter(getFragmentManager(), lf));

  7. Вот ваш класс 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. Есть ли у вас адрес электронной почты, чтобы я мог отправить вам свой текущий код для дальнейшей помощи?