2015-01-14 3 views
0

가 난 예에서 동적 요소를 생성하여 데이터를프로그래밍 방식으로 만든 구성 요소의 값을 어떻게 얻을 수 있습니까?

{"identification":[{"question":"Who created the C programming language?","answers":"Dennis Ritchie","subject":"1","points":"1","question-id":"1"},{"question":"What company created Visual Basic?","answers":"Microsoft","subject":"1","points":"1","question-id":"2"}],"multiplechoice":[{"question":"Which of the following programming languages are not Object Oriented?","answers":"C","choices":["Java","Visual Basic"],"subject":"1","points":"1","question-id":"3"},{"question":"The person who is responsible for the creation of Facebook?","answers":"Mark Zuckerberg","choices":["Steve Jobs","Bill Gates","Larry Page"],"subject":"1","points":"1","question-id":"4"}]} 

(아래 참조) JSON 문자열을 사용하여 내 웹 서버 내에서 데이터를 가져올 어떤 질문에는 3 가지 선택 사항이 있습니다. 따라서 3 개의 라디오 버튼에는 5 개의 라디오 버튼 등 5 가지 선택 사항이 있습니다.

이제 주요 문제는 프로그래밍 방식으로 생성 한 구성 요소의 참조를 얻는 방법에 대해 전혀 알지 못합니다. , XML을 사용할 때 findViewById를 사용하는 방법을 알고 있지만 이번에는 부모 레이아웃을 제외하고는 XML 파일이 사용되지 않습니다.

내가 만든 구성 요소의 모든 값을 JSON 문자열로 다시 가져 와서 구문 분석 할 계획입니다. 내가 코드에 대한 미안 해요

if (jsonStr != null) { 
      try { 
       JSONObject jsonObj = new JSONObject(jsonStr); 

       JSONObject jObject = new JSONObject(jsonObj.toString().trim()); 

       Iterator<?> keys = jObject.keys(); 

       Log.d("TEST: ", "WORKING> " + "ENABLED"); 

       JSONArray temp_json_arr = null; 

       JSONObject temp_json_obj = null; 

       String temp_string = ""; 

       int question_number = 1; 

       LinearLayout ll = (LinearLayout)findViewById(R.id.test_layout); 

       while(keys.hasNext()){ 

        String key = (String)keys.next(); 
        Log.d("TEST: ", "KEYS> " + key); 

        // Getting JSON Array node 
        temp_json_arr = jsonObj.getJSONArray(key); 

        // looping through All Questions 
        for (int i = 0; i < temp_json_arr.length(); i++) { 

         Log.d("TEST: ", "EXECUTE> before if condition"); 

         JSONObject q = temp_json_arr.getJSONObject(i); 

         if(key.equals("identification")) { 

          Log.d("TEST: ", "EXECUTE> START"); 

          int element_ctr = 0; 

          TextView[] question_textview = new TextView[10]; 

          TextView[] label_textview = new TextView[10]; 

          EditText[] answer_edittext = new EditText[10]; 

          TextView[] seperator_textview = new TextView[10]; 

          //question node 
          question_textview[element_ctr] = new TextView(getApplicationContext()); 

          question_textview[element_ctr].setText(question_number+". "+q.getString("question")); 

          question_textview[element_ctr].setTextAppearance(getApplicationContext(), R.style.GlobalTextView); 

          //question_textview[element_ctr]. 

          ll.addView(question_textview[element_ctr]); 

          //label node 
          label_textview[element_ctr] = new TextView(getApplicationContext()); 

          label_textview[element_ctr].setText("Answer:"); 

          label_textview[element_ctr].setTextAppearance(getApplicationContext(), R.style.GlobalTextView); 

          ll.addView(label_textview[element_ctr]); 

          //answer node 
          answer_edittext[element_ctr] = new EditText(getApplicationContext()); 

          answer_edittext[element_ctr].setTextAppearance(getApplicationContext(), R.style.GlobalTextView); 

          ll.addView(answer_edittext[element_ctr]); 

          if(i!=temp_json_arr.length()-1) { 

           //seperator 
           seperator_textview[element_ctr] = new TextView(getApplicationContext()); 

           seperator_textview[element_ctr].setText("--------------------------------------------------"); 

           ll.addView(seperator_textview[element_ctr]); 

           Log.d("TEST: ", "EXECUTE> END"); 

          } 

         } 

         if(key.equals("multiplechoice")) { 

          Log.d("TEST: ", "EXECUTE> START"); 

          int element_ctr = 0; 

          TextView[] question_textview = new TextView[10]; 

          TextView[] label_textview = new TextView[10]; 

          RadioButton[] answer_radiobutton = new RadioButton[10]; 

          TextView[] seperator_textview = new TextView[10]; 

          //question node 
          question_textview[element_ctr] = new TextView(getApplicationContext()); 

          question_textview[element_ctr].setText(question_number+". "+q.getString("question")); 

          question_textview[element_ctr].setTextAppearance(getApplicationContext(), R.style.GlobalTextView); 

          ll.addView(question_textview[element_ctr]); 

          //label node 
          label_textview[element_ctr] = new TextView(getApplicationContext()); 

          label_textview[element_ctr].setText("Answer:"); 

          label_textview[element_ctr].setTextAppearance(getApplicationContext(), R.style.GlobalTextView); 

          ll.addView(label_textview[element_ctr]); 

          //choices node 
          JSONArray temp_json_arr2 = null; 

          temp_json_arr2 = q.getJSONArray("choices"); 

          temp_string = q.getString("answers"); 

          temp_json_arr2.put(temp_string); 

          Random rnd = new Random(); 
          for (int k = temp_json_arr2.length() - 1; k >= 0; k--) 
          { 
           int j = rnd.nextInt(k + 1); 
           // Simple swap 
           Object object = temp_json_arr2.get(j); 
           temp_json_arr2.put(j, temp_json_arr2.get(k)); 
           temp_json_arr2.put(k, object); 
          } 

          Log.d("TEST: ", "TRAP> START"); 

          int group_ctr = 0; 

          RadioButton[] choices_radiobutton = new RadioButton[10]; 
          RadioGroup[] choices_radiogroup = new RadioGroup[10]; //create the RadioGroup 
          choices_radiogroup[group_ctr] = new RadioGroup(getApplicationContext()); 
          choices_radiogroup[group_ctr].setOrientation(RadioGroup.VERTICAL); 

          Log.d("TEST: ", "TRAP> END"); 


          for (int t = 0; t < temp_json_arr2.length(); t++) { 

           choices_radiobutton[t] = new RadioButton(getApplicationContext()); 
           choices_radiobutton[t].setText(temp_json_arr2.getString(t)); 
           choices_radiobutton[t].setTextAppearance(getApplicationContext(), R.style.GlobalTextView); 
           choices_radiogroup[group_ctr].addView(choices_radiobutton[t]); //the RadioButtons are added to the radioGroup instead of the layout 

          } 

          ll.addView(choices_radiogroup[group_ctr]);//you add the whole RadioGroup to the layout 

          group_ctr++; 

          if(i!=temp_json_arr.length()-1) { 

           //seperator 
           seperator_textview[element_ctr] = new TextView(getApplicationContext()); 

           seperator_textview[element_ctr].setText("--------------------------------------------------"); 

           ll.addView(seperator_textview[element_ctr]); 

           Log.d("TEST: ", "EXECUTE> END"); 

          } 

         } 

         if(key.equals("truefalse")) { 

          //Log.d("TEST: ", "hi iam true or false"); 

         } 

         question_number++; 

        }//end for 

       }//end while 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Log.e("ServiceHandler", "Couldn't get any data from the url"); 
     } 

: 아래의 코드가 동적으로 생성하는 구성 요소에 대한 책임이다

(내가 수행하는 방법에 대한 생각이 질문하지 주요 문제가있는) , 난 그냥 안드로이드 애플 리케이션을 만들기 시작하고 난 여전히 복잡한 것들에 뛰어 들기 전에 기본 거시기와 교수형을 얻으 려하고, 난 그냥 다른 것들로 진행하기 전에 지금 당면하고있는 문제를 해결하고 싶습니다.

답변

0

간단한 해결책은 코드에서 뷰/구성 요소를 만들 때 ID를 설정하는 것입니다 .

이 방법을 사용하십시오.

someView.setId(int); 

int는 양수 여야합니다. (임의의 번호)

일단 ID를 설정하면 코드의 다른 곳에서 참조 할 수 있습니다.

TextView1.setId(10); 

TextView tv = (TextView)findViewById(10); 
+0

위의 코드를 사용하여 어떻게 참조 할 수 있습니까? 23이 구성 요소의 수인 경우 R.id.23입니까? – clonedaccnt

+0

@clonedaccnt, 업데이트 된 답변보기 – Prem

+0

작동 중입니다. 지금 받아 들일 것입니다. 감사! – clonedaccnt

0

처음에는 복잡해 보일 수도 있지만 추가 요구 사항을 개선하는 데 도움이 될 수 있습니다.

DataStructure (사용자 정의 클래스)를 만들어이 json을 Object로 역 직렬화 (GSON 라이브러리 참조) 한 다음 UI에 바인딩하는 것이 좋습니다. UI가 업데이트되면 Object에 업데이트 된 값을 할당하고 서버로 다시 보냅니다. (쉬운 REST 작업을 위해 Retrofit 라이브러리를 참조하십시오.)

+0

난 정말 당신이 무엇에 관해 얘기하는지 모르겠어요. – clonedaccnt

관련 문제