Reputation: 455
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?
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
Upvotes: 1
Views: 322
Reputation: 19748
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:
radioGroup1.selectedIndex=-1;
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];
}
Upvotes: 0
Reputation: 1954
To delete something in Flash, or in other words ready it up for Garbage Collector try removing all the listeners from the object, removing it from stage and then setting it to null.
Upvotes: 1