1

我对单选按钮有疑问,因为当我从单选按钮所在的阶段删除实例时,如果我再次创建该实例,单选按钮会保留最后的选择。

(我用西班牙语写了这门课,如果你在识别概念上有问题,请问我)

类( crearPregunta.as 或 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;


    }

}

}

结果:现在发生了什么?

  1. 用户运行琐事:首先,选择开始选项(创建选项网格)
  2. 用户选择一个选项(创建 askQuestion 实例)
  3. 当用户从单选按钮中选择选项时(结果显示在 result_txt.text 上)
  4. 定时器被执行
  5. 从 Main 类中删除实例( askQuestion )
  6. 如果用户选择另一个选项,则问题和答案会正确显示,但是单选按钮会保持之前选择的选项,并且 result_txt.text 会显示此选择的结果。这是错误的,因为不必进行任何选择。

我从this..我有另一种情况..我有这个:静态实例a(这里创建实例c)静态实例b(这里是操作的结果。获得结果时将删除该实例)实例c(结果是显示)如果实例是在实例 a 中创建的,我该如何将信息从实例 b 发送到实例 c

4

2 回答 2

1

要在 Flash 中删除某些内容,或者换句话说,为垃圾收集器准备好它,请尝试从对象中删除所有侦听器,将其从舞台中删除,然后将其设置为 null。

于 2012-07-28T08:08:51.183 回答
0

我相信问题是您每次都重复使用相同的单选按钮组,但您没有重置该单选按钮组的 selectedIndex 或 selectedValue 。我相信这会解决问题:

            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];

            }
于 2012-07-28T19:06:26.543 回答