I’ve a problem with the radiobuttons because when I delete the instance from the stage where the radiobuttons are, if I create again the instance the radiobuttons keeps the last selection.
( I’ve written the class in spanish, if you’ve problems to identify the concept, please ask me )
Class ( crearPregunta.as or askQuestion.as )
package src.com.akkadian
{
import fl.controls.RadioButtonGroup;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.*;
import flash.events.MouseEvent;
import flash.net.*;
import flash.text.*;
import flash.utils.Timer;
import flash.xml.*;
import src.com.akkadian.manipularXML;
public class crearPregunta extends MovieClip
{
private static var _instance:crearPregunta = null;
private var xmlPath:String;
private var radioGroup1:RadioButtonGroup = new RadioButtonGroup("Questions");
private var xmlLoader:URLLoader = new URLLoader();
private var instanciaXML:manipularXML;
protected var time:Timer;
private var rs:String;
private var resp:XMLList;
private var re:XMLList;
private var pre:XMLList;
private var opSeleccionada:Number;
private var resultado:Boolean = false;
public function crearPregunta()
{
}
public static function getInstance():crearPregunta
{
if (_instance == null)
{
_instance = new crearPregunta();
}
return _instance;
}
private function generarContenido()
{
// Crea the XML instance from manipularXML class
this.instanciaXML = manipularXML.generarInstancia();
// Send the path of the file
this.xmlPath = "src/com/akkadian/preguntas.xml";
// Add the listener to proceed when the load is finished
xmlLoader.addEventListener(Event.COMPLETE, inXML);
xmlLoader.load(new URLRequest(this.xmlPath));
// adding a listener to the button sendResponse
enviarRespuesta.addEventListener(MouseEvent.CLICK, recibirRespuesta);
enviarRespuesta.buttonMode = true;
}
public function validarRespuesta(opcionSeleccionada:String):Boolean
{
// Option chosen
opSeleccionada = Number(opcionSeleccionada);
// Generate the content
generarContenido();
// Send the result
return resultado;
}
private function inXML(e:Event):void
{
// Add the radiobuttons to an Array
var radios:Array = [casoA, casoB, casoC];
// Obtain the data from the XML
var data = instanciaXML.obtenerInfo(e.target.data);
for each (var nodo:XML in data.pregunta)
{
if (nodo.@id == opSeleccionada)
{
// Keep the answer for the option chosen
resp = data.pregunta[opSeleccionada - 1].respuesta;
// Keep the value for the option chosen
re = data.pregunta[opSeleccionada - 1].respuesta.@valor;
// Keep the question
pre = data.pregunta[opSeleccionada - 1].@pre
// add the value of the question to the dinamic textfield
question.text = pre;
for (var u:uint = 0; u < radios.length; u++)
{
radios[u].group = radioGroup1;
radios[u].textField.multiline = true;
radios[u].textField.wordWrap = true;
radios[u].textField.width = 230;
radios[u].textField.height = 100;
radios[u].textField.autoSize = TextFieldAutoSize.LEFT;
// Add the answers to the labels
radios[u].label = resp[u];
// Add the answers to the values
radios[u].value = re[u];
}
}
}
}
private function recibirRespuesta(m:MouseEvent)
{
for each (var tre:XML in re)
{
// if the value of the answer is equal to the value stored
if (this.radioGroup1.selection.value == re)
{
// Save the result as true
this.resultado = true;
// Add the value of the answer to the textfield included on this Instance
result_txt.text = "Correcto";
}
else
{
// Save the result as false
this.resultado = false;
// Add the value of the answer to the textfield included on this Instance
result_txt.text = "Incorrecto";
}
}
// Add a function to create a timer
agregarTimer();
}
private function agregarTimer()
{
// Setup the timer
time = new Timer(1000, 1);
time.addEventListener(TimerEvent.TIMER_COMPLETE, cerrarTimer);
time.start();
}
private function cerrarTimer(t:TimerEvent)
{
// Just for information, I verify which are the instances that at present ran in the Main instance
Main.Instancia.obtenerNombreHijos();
// Remove the instance askQuestion from the Main
Main.Instancia.removeChildAt(2);
// I certify that the instance is deleted
Main.Instancia.obtenerNombreHijos();
// I change the instance of the xml class to null
instanciaXML = null;
}
}
}
Result: What is happening now?
- The user run the trivia: first, select the start option ( the grid of options is created )
- The user choose one option ( askQuestion instance is created )
- When the user select the option from the radiobuttons ( the result is displayed on the result_txt.text )
- The timer is executed
- Remove the instance ( askQuestion ) from the Main class
- IF the user select another option, the question and the answers are displayed correctly but, the radiobutton keep the option selected before and the result_txt.text shows the the result of this selection.. this is wrong because, no selection must be done.
I’ve another situation from this.. I’ve this:
static instance a ( here is created the instance c )
static instance b ( here the result of the operation. This instance will be removed when the result is obtained )
instance c ( result is display )
How can I do to send information from instance b to instance c inf the instance was created in instance a
I believe the problem is you’re re-using the same radio button group each time, but you don’t reset the selectedIndex or selectedValue of that radio button group. I believe this would fix the problem: