使用共享对象在列表组件中保存项目(flash AS3)

时间:2014-11-13 00:33:50

标签: list actionscript-3 flash object shared

我正在为ios创建一个简单的列表应用程序,您可以在其中输入一个文本字符串并将其作为列表项添加到List组件中。出于测试目的,我目前只是使用单击按钮通过AS将项目添加到列表组件。

我希望能够保存我正在写入列表的内容,并且我一直在尝试使用SharedObject.getLocal(“mySharedObject”)来完成它。方法。

这是我当前的代码(我在.FLA文件中使用AS3):

import fl.controls.List;
import fl.data.DataProvider;
import fl.events.ListEvent;

var saveListObject:SharedObject;
var Question_list: List = new List();
Question_list.setSize(320, 390);
Question_list.move(0, 0);

addChild(Question_list);

init(); 

function init(): void { 

saveListObject = SharedObject.getLocal("test"); 

btnSave.addEventListener(MouseEvent.CLICK, saveList); 

     if(saveListObject.data.savedList == null){ 
          trace("No saved list yet."); 
          saveListObject.data.savedList = Question_list.addItem; 
     } else {
          trace("Saved list found.");
          loadList();
     }
}

addTextBtn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event: MouseEvent): void {
    trace("Mouse clicked");
    Question_list.addItem({
        label: "New item"

    });
}

function saveList(e:MouseEvent):void{
     saveListObject.data.savedList = Question_list.dataProvider; 
     trace("List Saved!");
     saveListObject.flush(); 
     trace(saveListObject.size); 
}

function loadList():void{
    Question_list.removeAll();
      for (var p in saveListObject.data) {
    Question_list.addItem(saveListObject.data.savedList);
      }
     trace("List Loaded!");
    trace(Question_list.dataProvider);
}

在我的时间轴上,我有一个addTextBtn和一个btnSave。 我的列表组件名为Question_list。 saveListObject是我的SharedObject。

我设法成功保存和加载,但似乎我正在加载的数据未被Question_list正确读取。我可以添加尽可能多的列表项,当我再次打开.swf是一(1)个空白列表项时,我得到的所有列表项。我怀疑我将所有列表数据保存到一个数组中,我无法将其加载回带有标签的不同列表项。 (我正在使用标签显示Question_list中的文字)

我希望这里有人能以正确的方式指导我。

非常感谢!

2 个答案:

答案 0 :(得分:0)

问题是如何访问SharedObject。你有:

  

saveListObject.data.savedList = value;

我会用:

  

saveListObject.data [" savedList"] = value;

希望有所帮助

答案 1 :(得分:0)

您的问题是listLoad()功能。

function loadList():void{
    Question_list.removeAll();
      for (var p in saveListObject.data) {
    Question_list.addItem(saveListObject.data.savedList);
      }
     trace("List Loaded!");
    trace(Question_list.dataProvider);
}

具体来说,Question_list.addItem(saveListObject.data.savedList); savedList是一个包含整个已保存列表的对象,而Question_list.addItem()只会添加一个项目。因此,您创建一个新的列表条目,表示您的所有数据。

我建议改变你的循环:

 for each(var p in saveListObject.data.savedList) {
        Question_list.addItem(p);
 }

这将逐个拉出已保存列表的每一行,并将其添加到屏幕列表中。