Создание spinner динамически на основе REST api
У меня есть форма анкеты, где содержание является динамическим (вопросы и значения счетчика могут быть обновлены с сайта). Мне нужно иметь возможность извлекать все вопросы из REST api и показывать их динамически в TextView (эта часть выполнена), а также показывать ответы create user input в форме для Spinner или EditText на основе вопроса. Я могу создавать блесны, но не могу показать значения в них.
// Question List result List<QuestionBankListItem> result = response.body(); //Create TextView final TextView[] myTextViews = new TextView[result.size()]; for (int i = 0; i < result.size(); i++) { QuestionBankListItem items = result.get(i); // Create Labels dynamically final TextView rowTextView = new TextView(VisitorsSurveyActivity.this); rowTextView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); rowTextView.setText(i + 1 + ". " + items.getsQuestion()); activityVisitorsSurveyBinding.rootLayout.addView(rowTextView); myTextViews[i] = rowTextView; //answerResult = retrieveAnswerList(items.getId()); switch (items.getiQuestionTypeID()) { case 1: // Single Select Spinner final Spinner singleSelectSpinner = new Spinner(VisitorsSurveyActivity.this); singleSelectSpinner.setAdapter(new ArrayAdapter<>(VisitorsSurveyActivity.this, android.R.layout.simple_list_item_1, retrieveAnswerList(items.getId()))); activityVisitorsSurveyBinding.rootLayout.addView(singleSelectSpinner); break; case 2: // Multi selectSpinner final Spinner multiSelectSpinner = new Spinner(VisitorsSurveyActivity.this); break; case 5: // Edit Text final EditText freeText = new EditText(VisitorsSurveyActivity.this); activityVisitorsSurveyBinding.rootLayout.addView(freeText); break; } }
// Method to retrieve Answers based on question private List<AnswerBankListItem> retrieveAnswerList(int id) { Call<List<AnswerBankListItem>> call = apiInterface.retrieveAnswerBankList("bearer " + sToken, id, 1); call.enqueue(new Callback<List<AnswerBankListItem>>() { @Override public void onResponse(@NonNull Call<List<AnswerBankListItem>> call, @NonNull Response<List<AnswerBankListItem>> response) { if (response.code() >= 400) { Snackbar.make(activityVisitorsSurveyBinding.rootLayout, "Unauthorized Request", Snackbar.LENGTH_LONG).show(); } else if (response.code() >= 500) { Snackbar.make(activityVisitorsSurveyBinding.rootLayout, "Server Error", Snackbar.LENGTH_LONG).show(); } else if (response.isSuccessful() && response.body() != null) { answerResult = response.body(); } } @Override public void onFailure(@NonNull Call<List<AnswerBankListItem>> call, @NonNull Throwable t) { } }); return answerResult; }
Что я уже пробовал:
Я могу извлекать вопросы, создавать текстовые представления динамически и показывать их в текстовом представлении. Я также могу получить ответы в виде объектов списка, но не могу показать результат в прядильщике
David Crow
Я полагаю, вы имеете в виду case 1
Если да, то мог бы singleSelectSpinner
выходить за пределы видимости?
Является ли это вашим намерением иметь switch()/case
заявления внутри компании for()
петля?
Rahul Ramakrishnan
REST api, который получает вопросы, имеет параметр questionTypeID, который указывает, какой тип входных данных необходимо создать.
questionTypesID 1 - спиннер
questionTypesID 2 - Multi Select Spinner
questionTypesID 5 - EditText
Поэтому сначала я получаю список вопросов и в соответствии с questionTypeID необходимо создать соответствующие виджеты