ユーザーが送信ボタンをタップしたときにチェックされたラジオボタンを取得しようとすると、ログには常に-1が出力されます(そうではありません)。これは、buildQuestions()が実行されるたびにradioGroupをリセットするのが理にかなっています。だから、私はより良い方法が必要です。v.getParent()を試しましたが、それでは近づかないようです。私の最終目標は?submitTaskに渡すには、選択したradioButtonとその横にあるテキストを指定します。何が違うのですか?
UI要素全体を構築するコードは次のとおりです。
public class ElectionsFragment extends SherlockFragment {
TableLayout questionContainer;
View mainLayout;
int leftMargin=0;
int topMargin=4;
int rightMargin=0;
int bottomMargin=0;
RadioGroup radioGroup;
Polling activity;
public void buildQuestions(JSONObject question) throws JSONException {
LayoutInflater inflater = (LayoutInflater) getActivity().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//progressBar.setVisibility(View.GONE);
questionContainer = (TableLayout) mainLayout.findViewById(R.id.questionContainer);
//questionContainer.removeAllViews();
View questionBox = inflater.inflate(R.layout.question, null);
questionBox.setId(Integer.parseInt(question.getString("id")));
TextView title = (TextView) questionBox.findViewById(R.id.questionTextView);
title.setText(question.getString("title"));
radioGroup = (RadioGroup) questionBox.findViewById(R.id.responseRadioGroup);
String typeFromTable = question.getString("default");
Log.v("default", typeFromTable);
int responseType = Integer.parseInt(typeFromTable);
if (responseType == 1) {
Log.v("1", question.toString());
//populate default radio buttons
Resources res = getResources();
String[] defaultAnswers = res.getStringArray(R.array.defaultAnswers);
int j = 0;
while (j < 5) {
RadioButton rb = new RadioButton(getActivity());
rb.setText(defaultAnswers[j]);
radioGroup.addView(rb);
j++;
}
}
else if (responseType == 0) {
for (int j = 0; j < 5; j++) {
if (question.getString("answer" + Integer.toString(j)) != "null") {
RadioButton rb;
rb = new RadioButton(getActivity());
rb.setText(question.getString("answer" + Integer.toString(j)));
if (question.getString("answer" + Integer.toString(j)).length() != 0) {
radioGroup.addView(rb);
}
}
else {
if (question.getString("answer" + Integer.toString(j)) == "null") {
RadioButton rb;
rb = new RadioButton(getActivity());
rb.setText("null");
radioGroup.addView(rb);
}
}
}
}
Button chartsButton = (Button) questionBox.findViewById(R.id.chartsButton);
chartsButton.setTag(question);
Button submitButton = (Button) questionBox.findViewById(R.id.submitButton);
chartsButton.setOnClickListener(chartsListener);
submitButton.setOnClickListener(submitListener);
TableRow tr = (TableRow) questionBox;
TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.MATCH_PARENT);
trParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
tr.setLayoutParams(trParams);
questionContainer.addView(tr);
submitButton.setTag(question);
}
そして、これがsubmitButtonのonClickListenerです
public OnClickListener submitListener = new OnClickListener() {
public void onClick(View v) {
userFunctions = new UserFunctions();
if (userFunctions.isUserLoggedIn(activity)) {
Log.v("submit", Integer.toString(radioGroup.getCheckedRadioButtonId()));
SubmitTask submitTask = new SubmitTask((Polling) activity, (JSONObject) v.getTag());
submitTask.execute();
}
}
};