Rahul Ramakrishnan Ответов: 0

Создание 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 необходимо создать соответствующие виджеты

0 Ответов