가 난 예에서 동적 요소를 생성하여 데이터를프로그래밍 방식으로 만든 구성 요소의 값을 어떻게 얻을 수 있습니까?
{"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");
}
: 아래의 코드가 동적으로 생성하는 구성 요소에 대한 책임이다
(내가 수행하는 방법에 대한 생각이 질문하지 주요 문제가있는) , 난 그냥 안드로이드 애플 리케이션을 만들기 시작하고 난 여전히 복잡한 것들에 뛰어 들기 전에 기본 거시기와 교수형을 얻으 려하고, 난 그냥 다른 것들로 진행하기 전에 지금 당면하고있는 문제를 해결하고 싶습니다.
위의 코드를 사용하여 어떻게 참조 할 수 있습니까? 23이 구성 요소의 수인 경우 R.id.23입니까? – clonedaccnt
@clonedaccnt, 업데이트 된 답변보기 – Prem
작동 중입니다. 지금 받아 들일 것입니다. 감사! – clonedaccnt