#actionscript-3 #apache-flex
#actionscript-3 #apache-flex
Вопрос:
У меня есть панель кнопок Spark, и я правильно подключил ее к ViewStack. В настоящее время, когда я запускаю приложение (AIR), первая кнопка на панели кнопок выбрана по умолчанию. Как я могу сделать вторую кнопку выбранной по умолчанию?
<mx:ViewStack id="viewStack">
<s:NavigatorContent id="Page 1">
<!-- Other stuff in here -->
</s:NavigatorContent>
<s:NavigatorContent id="Page 2">
<!-- Other stuff in here -->
</s:NavigatorContent>
</mx:ViewStack>
<s:ButtonBar dataProvider="{viewStack}" selectedIndex="1"></s:ButtonBar>
Комментарии:
1. Вы не использовали ее раньше, но панель кнопок не имеет SelectedIndex? Это было, если я хорошо помню, в framework 3.0 с flex builder 3
2. Я пробовал это, но нет, первая кнопка на панели кнопок остается выбранной независимо от значения, которое я ввел для выбранного индекса. Странно!
3. хе-хе, попробуйте поместить ее после того, как вы назначите для нее поставщика данных, или, может быть, в событии creationcomplete, просто чтобы избежать проблем с технологиями.. вы пытались нажать кнопку и изменить выбранный индекс в этот момент, например, myButtonBar.SelectedIndex = 1; если это работает … это то, что выбранный индекс отправляется до назначения вам поставщика данных .. вам нужно назначить его после, не знаю, есть ли у него событие dataproviderChanged .. или что-то в этом роде
Ответ №1:
Я сделал это, и это сработало хорошо. Вы уверены, что SelectedIndex не работает?
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:ButtonBar
selectedIndex="2" width="400" height="300">
<s:dataProvider>
<s:ArrayCollection>
<fx:String>1</fx:String>
<fx:String>2</fx:String>
<fx:String>3</fx:String>
</s:ArrayCollection>
</s:dataProvider>
</s:ButtonBar>
</s:Application>
Редактировать:
Это помогает вам?
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.CollectionEvent;
[Bindable]
private var dataSource:ArrayCollection = new ArrayCollection();
private function init():void
{
dataSource = new ArrayCollection(new Array("1","2","3"));
dataSource.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionEventChange);
dataSource.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
}
private function collectionEventChange(event:CollectionEvent):void
{
this.btnBar.selectedIndex = 2;
}
]]>
</fx:Script>
<s:ButtonBar id="btnBar" dataProvider="{dataSource}"
width="400" height="300" >
</s:ButtonBar>
</s:Application>
Комментарии:
1. Спасибо за ваш ответ. Это то, что я сделал:
<s:ButtonBar left="0" bottom="0" selectedIndex="1" dataProvider="{dataSource}"/>
И я также пробовал:<s:ButtonBar left="0" bottom="0" dataProvider="{dataSource} selectedIndex="1" "/>
ноselectedIndex
, похоже, по-прежнему не работает.2. когда вы назначаете источник данных?
3. Я использую
<mx:ViewStack>
with<s:NavigatorContent>
внутри нее (я обновил свой вопрос, чтобы отразить это.) Еще раз спасибо за помощь!
Ответ №2:
Вам нужно установить выбранный индекс после инициализации компонента и после заполнения панели кнопок. Панель кнопок создает кнопки только тогда, когда обнаруживает изменение в своем dataprovider (путем прикрепления к нему changewatcher после привязки).
Вот почему в пересмотренном ответе Mr. есть материал с настройкой выбранного индекса внутри прослушивателя CollectionEvent.
Более надежным решением является подкласс buttonbar и настроить его, добавив элемент defaultSelectedIndex или создать mixin, который может добавить эту функциональность в любой подкласс listbase. defaultSelectedIndex установит выбранный индекс в указанное значение при изменении его dataprovider.