Get item by index in a tree control

actionscript-3apache-flextree

I'm doing a drag and drop operation on a tree using some help from Adobe's quick Starts:
http://www.adobe.com/devnet/flex/quickstart/working_with_tree/

The code suggested is roughly this:

var dropTarget:Tree = Tree(evt.currentTarget);
var i:int = dropTarget.calculateDropIndex(evt);
myTree.selectedIndex = i;
var node:XML = myTree.selectedItem as XML;
var drugXML:XML = XML(Tree(evt.dragInitiator).selectedItem);
if(node.localName() != drugXML.localName()){
    DragManager.showFeedback(DragManager.NONE);
    return;
}else{
    DragManager.showFeedback(DragManager.COPY);
}

This is all well and good, but I don't like the way it is selecting(highlighting) each item in the tree I'm dropping on, it's less clear where the item is going to drop. I want to implement this without the selection but there doesn't seem to be a way to get the XML of the node using just the index. I would like something like this:

var dropTarget:Tree = Tree(evt.currentTarget);
var i:int = dropTarget.calculateDropIndex(evt);

var node:XML = myTree.itemAt(i) as XML; 
//AFAIK itemAt(i) or anything like it does not exist

var drugXML:XML = XML(Tree(evt.dragInitiator).selectedItem);
if(node.localName() != drugXML.localName()){
    DragManager.showFeedback(DragManager.NONE);
    return;
}else{
    DragManager.showFeedback(DragManager.COPY);
}

So does anyone know what function is, or what I can do to extend the tree to have a function, like "itemAt(i)"

Thanks
~Mike

EDIT: I forgot to post that my current workaround is setting the selectedIndex = -1 after I get my node:XML. I'm afraid that if something bogs on the processor the user may see it select then deselect.

Best Answer

Much simpler, though there may be gotchas:

var index:int = ...
var renderer:IListItemRenderer = tree.indexToItemRenderer(index);
var item:Object = renderer.data;

This won't work if the index is offscreen (since there might not be an active itemRenderer); shouldn't be an issue for drag and drop.