2015-05-28 3 views
2

Я хочу создать переключатель, checkbox, spinner динамически с веб-службы. Ниже мой ответ.Как создавать представления динамически из json в android listview?

{ 
    "getSurvey": { 
     "ErrorCode": "0", 
     "Result": "Success", 
     "Response": [ 
      { 
       "SurveyId": "91", 
       "SurveyName": "Sample Survey", 
       "Questions": [ 
        { 
         "QuestionId": "553", 
         "QuestionText": "<p style=\"margin: 0px; text-align: left;\">Are you satisfied with Cement Quality?</p>", 
         "Type": "RadioButtonList", 
         "Mandatory": "Y", 
         "OptionValue": [ 
          { 
           "AnswerId": "2220", 
           "AnswerValue": "Excellent" 
          }, 
          { 
           "AnswerId": "2221", 
           "AnswerValue": "Good" 
          }, 
          { 
           "AnswerId": "2222", 
           "AnswerValue": "Satisfactory" 
          }, 
          { 
           "AnswerId": "2223", 
           "AnswerValue": "Poor" 
          } 
         ] 
        }, 
        { 
         "QuestionId": "554", 
         "QuestionText": "How will you rate Cement? (0= Lowest and 7= Highest)&nbsp;", 
         "Type": "DropDownList", 
         "Mandatory": "Y", 
         "OptionValue": [ 
          { 
           "AnswerId": "2224", 
           "AnswerValue": "0" 
          }, 
          { 
           "AnswerId": "2225", 
           "AnswerValue": "1" 
          }, 
          { 
           "AnswerId": "2226", 
           "AnswerValue": "2" 
          }, 
          { 
           "AnswerId": "2227", 
           "AnswerValue": "3" 
          }, 
          { 
           "AnswerId": "2228", 
           "AnswerValue": "4" 
          }, 
          { 
           "AnswerId": "2229", 
           "AnswerValue": "5" 
          }, 
          { 
           "AnswerId": "2230", 
           "AnswerValue": "6" 
          }, 
          { 
           "AnswerId": "2231", 
           "AnswerValue": "7" 
          } 
         ] 
        }, 
        { 
         "QuestionId": "555", 
         "QuestionText": "What Kind of issues you face while Delivery?", 
         "Type": "ListBox", 
         "Mandatory": "Y", 
         "OptionValue": [ 
          { 
           "AnswerId": "2232", 
           "AnswerValue": "Logistic Issue" 
          }, 
          { 
           "AnswerId": "2233", 
           "AnswerValue": "Material Handeling " 
          }, 
          { 
           "AnswerId": "2234", 
           "AnswerValue": "Stock not available" 
          }, 
          { 
           "AnswerId": "2235", 
           "AnswerValue": "Wastage of Cement" 
          }, 
          { 
           "AnswerId": "2236", 
           "AnswerValue": "Others" 
          } 
         ] 
        }, 
        { 
         "QuestionId": "559", 
         "QuestionText": "Do you like Cement?", 
         "Type": "CheckBoxList", 
         "Mandatory": "Y", 
         "OptionValue": [ 
          { 
           "AnswerId": "2237", 
           "AnswerValue": "Yes" 
          }, 
          { 
           "AnswerId": "2238", 
           "AnswerValue": "No" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    } 
} 

Основываясь на типе, мне нужно динамически создавать представления. Пожалуйста, дайте мне идею или решение, как это сделать. После динамического создания представлений мне нужно получить все выбранные значения из созданных представлений.

Спасибо.

+0

Вы показываете ответ в списке или где? – Bharatesh

+0

@bharat Я не знаю, как создать и показать представление для этого ответа. Но мне нужно показать в линейном макете. –

+0

@ShanmugaM нашла это https://github.com/vijayrawatsan/android-json-form- теперь мастер. посмотрите, помогает ли это. не уверен, соответствует ли оно вашим требованиям. – Raghunandan

ответ

3

Это сложно, вам нужно научиться создавать макеты динамически в коде в первую очередь. Я бы начал с моих обзорных руководств, которые можно найти здесь: http://www.dreamincode.net/forums/topic/130521-android-part-iii-dynamic-layouts/

Вам нужно было бы создать класс, который мог бы анализировать эти данные и создавать представления специально для ваших значений. Как только это будет сделано, вы сможете снова прочитать данные или сохранить их, чтобы вы могли загружать данные на экран. Это также можно сделать одновременно с созданием макета.

+0

Спасибо за ваш ответ. Расскажите, пожалуйста, как разместить соответствующий QuestionText ниже соответствующего OptionValue для динамического просмотра в линейном макете. –

+0

Это помогло мне, когда я начал использовать 'JSON' в моем проекте http: // stackoverflow.com/questions/9605913/how-to-parse-json-in-android Есть несколько сайтов, которые проходят через парсинг объектов 'JSON'. Это действительно зависит от того, что такое структура 'JSON' и как она выложена. Я бы поехал сюда http://jsonviewer.stack.hu/ и поставил вас 'JSON' и посмотрел, что такое' Array' и что такое 'Object', оттуда. –

+0

Я успешно проанализировал этот ответ и сохранил его в списке массивов. Но я не могу создать представление для всех вопросов с соответствующей опцией. –

0

Если вопрос типа '"Type": "RadioButtonList"' известен заранее, вы можете создать предопределенные макеты, адресованные каждому из этих типов. Затем вам нужно проанализировать и найти объект/Response/Questions/Type в вашем json и раздуть соответствующий макет. Вам также необходимо создать адаптер, который может принимать список параметров для каждого типа. Плагин адаптера и вид за макет.

Я делаю что-то подобное для продукта, над которым я работаю. После получения json-фида я просматриваю вопросы, чтобы увидеть тип макетов, которые мне нужны. В моем сценарии я создаю ViewPager динамически: каждая запись в представлении пейджера будет иметь макет, соответствующий типу вопроса. Затем я создавал список параметров для каждого типа вопросов и отправлял их адаптеру, который привязан к списку или выпадающему списку или настраиваемому типу, который находится в файле макета.

+0

Привет, вы можете дать мне часть кода для отображения вопросов и вариантов? –

0

просто разобрать и установить данные статические данные в коде

ScrollView sv = new ScrollView(this); 
    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    sv.addView(ll); 


    //radio list 
    RadioGroup group = new RadioGroup(this); 
    group.setOrientation(RadioGroup.VERTICAL); 

    RadioButton btn1 = new RadioButton(this); 
    btn1.setText("BTN1"); 
    group.addView(btn1); 

    RadioButton btn2 = new RadioButton(this); 
    btn2.setText("BTN2"); 
    group.addView(btn2); 

    ll.addView(group); 


    //drop down 
    Spinner spiner = new Spinner(this); 
    List<String> data = new ArrayList<String>(); 
    data.add("Spinner - one"); 
    data.add("Spinner - two"); 
    data.add("Spinner - three"); 
    data.add("Spinner - four"); 
    data.add("Spinner - five"); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data); 
    spiner.setAdapter(adapter); 

    ll.addView(spiner); 

    //listview 
    ListView listData = new ListView(this); 
    List<String> dataList = new ArrayList<String>(); 
    dataList.add("List - one"); 
    dataList.add("List - two"); 
    dataList.add("List - three"); 
    dataList.add("List - four"); 
    dataList.add("List - five"); 
    dataList.add("List - six"); 
    dataList.add("List - seven"); 
    dataList.add("List - eight"); 
    dataList.add("List - nine"); 
    dataList.add("List - ten"); 
    dataList.add("List - eleven"); 
    dataList.add("List - twelve"); 
    dataList.add("List - thirteen"); 
    dataList.add("List - fourteen"); 
    dataList.add("List - fifteen"); 
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,  
    android.R.layout.simple_list_item_1, dataList); 
    listData.setAdapter(listAdapter); 

    ll.addView(listData); 
    this.setContentView(sv); 

    setListViewHeightBasedOnChildren(listData); 

метода опорного

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     // pre-condition 
     return; 
    } 

    int totalHeight = 0; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(0, 0); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 
+0

Привет У каждого вопроса есть разные варианты. Как создать представление для параметров динамически на основе длины опций. Параметры –

+0

- это JSON Array, так что при получении длины массива json вы можете создавать переключатели. –

+0

Привет, я не знаю, как создать. Можете ли вы создать образец для ответа? –

0

Попробуйте это. Надеюсь, это может вам помочь.

public class MainActivity extends Activity { 
 
\t String response = ""; 
 

 
\t @Override 
 
\t protected void onCreate(Bundle savedInstanceState) { 
 
\t \t super.onCreate(savedInstanceState); 
 
\t \t setContentView(R.layout.activity_main); 
 
\t \t try { 
 
\t \t \t JSONObject jObject1 = new JSONObject(response); 
 
\t \t \t JSONObject jObject2 = jObject1.getJSONObject("getSurvey"); 
 
\t \t \t if (jObject2.getString("ErrorCode").equals("0")) { 
 
\t \t \t \t JSONArray jArray = jObject2.getJSONArray("Response"); 
 
\t \t \t \t JSONObject jObject3 = jArray.getJSONObject(0);// Response array 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // contains only 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // one object , 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // otherwise we 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // can put loop 
 
\t \t \t \t JSONArray jArray2 = jObject3.getJSONArray("Questions"); 
 
\t \t \t \t for (int i = 0; i < jArray2.length(); i++) { 
 

 
\t \t \t \t \t JSONObject jObjectQ = jArray2.getJSONObject(i); 
 
\t \t \t \t \t String QUESTION = jObjectQ.getString("QuestionText"); // Similarly 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // you 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // can 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // take 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // other 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t // parameters. 
 
\t \t \t \t \t JSONArray jArrayA = jObjectQ.getJSONArray("OptionValue"); 
 
\t \t \t \t \t for (int j = 0; j < jArrayA.length(); j++) { 
 
\t \t \t \t \t \t JSONObject jObjectOPTION = jArrayA.getJSONObject(j); 
 
\t \t \t \t \t \t String ANSWERID = jObjectOPTION.getString("AnswerId"); 
 
\t \t \t \t \t \t String ANSWERVALUE = jObjectOPTION 
 
\t \t \t \t \t \t \t \t .getString("AnswerValue"); 
 

 
\t \t \t \t \t \t // Add Dynamically in Spinner or create Radiobutton as 
 
\t \t \t \t \t \t // per your requirement 
 
\t \t \t \t \t } 
 

 
\t \t \t \t } 
 

 
\t \t \t } 
 

 
\t \t } catch (JSONException e) { 
 
\t \t \t // TODO Auto-generated catch block 
 
\t \t \t e.printStackTrace(); 
 
\t \t } 
 

 
\t } 
 
}

Вы также можете установить Id динамически каждого управления. на основе которого вы должны вызвать любой метод и проверить идентификатор элементов управления.

+0

Hi Arth Tilva Мне нужен этот код только для создания вида –

Смежные вопросы