2012-04-27 55 views
1

可能重复经过单选:
getCheckedRadioButtonId() returning useless int?访问从巴顿的onClickListener

当我试图让当用户点击提交按钮,单选按钮被选中,日志始终打印-1结果(而不是情况)。这使得每次buildQuestions()运行时都会重置radioGroup的感官b/c。所以,我需要一种更好的方式。我试过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); 
} 

而这里的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(); 

     } 
    } 
}; 

回答