2010-12-23 8 views
8

मुझे रेडियो ग्रुप के स्पष्ट चेक() के साथ कोई समस्या है। मैं उपयोगकर्ता को एक से अधिक विकल्प प्रश्न प्रदर्शित कर रहा हूं और उपयोगकर्ता उत्तर का चयन करने के बाद मैं जवाब की जांच करता हूं, उसे कुछ प्रतिक्रिया देता हूं और फिर अगले प्रश्न पर जाता हूं। अगले प्रश्न पर जाने की प्रक्रिया में मैं रेडियो ग्रुप पर स्पष्ट जांच करता हूं।रेडियो समूह के लिए एंड्रॉइड के स्पष्ट चेक() में त्रुटि?

क्या कोई मुझे बता सकता है कि ऑन चेक किए गए चेंज विधि को 3 बार क्यों कहा जाता है? एक बार जब परिवर्तन वास्तव में होता है (उपयोगकर्ता परिवर्तन के साथ), एक बार जब मैं साफ़ करता हूं (चयनित आईडी के रूप में -1 के साथ) और एक बार बीच में (उपयोगकर्ता के साथ फिर से बदलता है)?

जहां तक ​​मैं दूसरा ट्रिगर बता सकता हूं स्पष्ट चेक द्वारा उकसाया जाता है। नीचे दिए गए कोड:

private void checkAnswer(RadioGroup group, int checkedId){ 
    // this makes sure it doesn't blow up when the check is cleared 
    // also we don't check the answer when there is no answer 
    if (checkedId == -1) return; 
    if (group.getCheckedRadioButtonId() == -1) return; 

    // check if correct answer 
    if (checkedId == validAnswerId){ 
     score++; 
     this.giveFeedBack(feedBackType.GOOD); 
    } else { 
     this.giveFeedBack(feedBackType.BAD); 
    } 
    // allow for user to see feedback and move to next question 
    h.postDelayed(this, 800); 
} 

private void changeToQuestion(int questionNumber){ 
    if (questionNumber >= this.questionSet.size()){ 
     // means we are past the question set 
     // we're going to the score activity 
     this.goToScoreActivity(); 
     return; 
    } 
    //clearing the check 
    gr.clearCheck(); 
    // give change the feedback back to question 
    imgFeedback.setImageResource(R.drawable.question_mark); //OTHER CODE HERE 
} 

और रन विधि इस

public void run() { 
     questionNumber++; 
     changeToQuestion(questionNumber); 
    } 

उत्तर

18

तरह लग रहा है क्या मुझे पता चला है कि अगर एक आइटम की जाँच की है और आप रेडियो समूह पर clearCheck() फोन यह onCheckedChanged दो बार फोन नहीं है। आइटम की आईडी के साथ पहली बार चेक किया गया था और दूसरी बार -1/View.NO_ID के साथ। आईएमएचओ, यह एक बग है और जाहिर है यह कम से कम 1.6 के आसपास रहा है। यह Google कोड बग रिपोर्ट देखें: http://code.google.com/p/android/issues/detail?id=4785

ऐसा लगता है कि एकमात्र समाधान वास्तविक RadioButton.isChecked() को जांचना और परीक्षण करना सही है या गलत है। इस प्रकार की वस्तु onCheckedChanged के उद्देश्य को आइटम की आईडी लौटने के उद्देश्य से हरा देती है क्योंकि अब आपको उन बटनों के संदर्भ रखना होगा या हर बार findViewById पर कॉल करना होगा।

मुझे संदेह है कि वे इसे बदलने के बाद इसे ठीक कर देंगे क्योंकि यह संभवतः अप्रत्याशित तरीकों से मौजूदा कोड को तोड़ देगा।

+0

@qbeticus धन्यवाद तुम, मैं माने एक बूलियन वैरिएबल का उपयोग करने के अंत में जीड यह पता लगाने के लिए कि ऑन चेक किए गए चेंज को चेक किए गए विकल्प का मूल्यांकन करना जारी रखना चाहिए या नहीं। –

+0

यह पुष्टि करने के लिए धन्यवाद कि यह एक बग है, मैं रेडियोग्रुप के अजीब व्यवहार को देखने के बाद इसे संदेह कर रहा था। –

2

मुझे भी इसी तरह की समस्या थी। मेरे समाधान:

प्रक्रिया में

:

public void onCheckedChanged(RadioGroup rGroup, int checkedId) 

मैं checkedId की जाँच करें। यह -1 के बराबर है यदि आप clearCheck() का उपयोग करते हैं, अन्यथा यह चयनित रेडियोग्रुप बच्चे

11

मुझे समान समस्या का सामना करना पड़ा और मैंने अन्य कार्य-आसपास हल किया।

  1. सेट CheckedChangeListener शून्य के रूप में
  2. आपके ऑपरेशन
  3. क्या आपके OnCheckedChangeListener रीसेट फिर

कोड snnipet:

rdbGroup.setOnCheckedChangeListener(null); 
rdbGroup.clearCheck(); 
rdbGroup.setOnCheckedChangeListener(checkedChangeListener); 

आशा इस में मदद मिलेगी ツ

+1

भयानक काम चारों ओर! बहुत बहुत धन्यवाद :) –

संबंधित मुद्दे