在使用RadioButton 作为DataGrid的ItemRender的时候,当数据过多滚动条出现的时候,那么在滚动条滚动的时候,上一次选中的行的选中状态会丢失。当前选中的行是不确定的。导致选中状态丢失的原因是多条数据公用一个ItemRender。比如在一个DataGride中有100条数据,列表每次最多显示5条,那么在绘制组件的时候Flex只会创建6或者7个ItemRender对象,其中的5个供5条数据使用,另外的1个或者2个只是为了性能方面考虑而创建。
当你在滚动滚条时候,会调用RadioButton的set data() 方法,用另外的业务数据来填充着RadioButton。
比如五条数据d1-d5,五个ItemRender i1-i5,初始化的时候是一一对应的,但当你下拉滚动条,显示d2-d6条数据的时候此时并不会重新创建一个ItemRender供d6使用,而是循环起来让他用i1的,详细的说明在下面的链接http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html。
下面的代码RadioBtnItemRender继承RadioButton,重写onChange和set data,以实现状态不丢,下面代码只是在setData的时候动态的增加一个字段_selectedFlag从而避免对业务模型的约束。
package utils.itemrender
{
import flash.events.Event;
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import mx.controls.Button;
import mx.controls.DataGrid;
import mx.controls.RadioButton;
public class RadioBtnItemRender extends RadioButton
{
public static const NAME:String="radioButtonGroup";
public static const FIELD:String="_selectedFlag";
private static var _firstFlag:Boolean=true;
private var _clickFunction:Function;
public function set clickFunction(_clickFunction:Function):void
{
this._clickFunction=_clickFunction;
this.addEventListener(MouseEvent.CLICK, this._clickFunction);
}
public function get clickFunction():Function
{
return this._clickFunction;
}
public function RadioBtnItemRender():void
{
super();
this.groupName=NAME;
this.addEventListener(Event.CHANGE, onChange);
}
private function onChange(event:Event):void
{
var dg:DataGrid = this.owner as DataGrid;
var collection:ArrayCollection = dg.dataProvider as ArrayCollection;
for each(var d:Object in collection){
d.selectedFlag = false;
}
this.data.selectedFlag=this.selected;
}
override public function set data(value:Object):void
{
// if(_firstFlag){
// value.selectedFlag = true;
// }
// _firstFlag = false;
if (value.hasOwnProperty("selectedFlag"))
{
this.selected=value.selectedFlag;
}
else
{
value.selectedFlag = false;
this.selected=false;
}
super.data=value;
}
}
}
在mxml文件中可以这样用:
<mx:DataGridColumn headerText="yourText" itemRenderer="{new ClassFactory(message.utils.RadioBtnItemRender)}"/>
分享到:
相关推荐
5. 使用VisualStateManager:WPF提供了VisualStateManager来管理控件的视觉状态,可以尝试利用它来管理RadioButton的选中状态,确保状态的正确流转。 6. 更新WPF框架:如果这是一个已知的框架bug,尝试更新到最新...
- 监听RadioButton的选中状态变化,通常有两种方式:一是使用 `OnCheckedChangeListener`,二是通过 `setOnClickListener`。 - `OnCheckedChangeListener` 是一个接口,包含 `onCheckedChanged()` 方法,当...
1. **`Fragment`的生命周期管理**:确保在正确的时间添加、替换或移除`Fragment`,以避免内存泄漏和状态丢失。 2. **`ViewPaper`的性能优化**:对于大量的文本或图像加载,需要考虑缓存策略、异步加载和内存管理,以...
1. **背景变色**:在Adapter的getView()方法中,根据选中状态更改View的背景颜色。可以使用条件语句来判断当前项是否被选中,然后使用setBackgroundColor()或使用自定义Selector来改变背景。 2. **字体变色**:同样...
3.1 滑动时选中状态丢失:这是由于ListView重用视图导致的问题。为避免此问题,需要在getView()方法中,根据数据项的选中状态设置CheckBox的checked属性。 3.2 点击事件冲突:ListView的点击事件可能与CheckBox的...
- 在`cellForRowAt`中,根据`selectedIndexPath`判断当前Cell是否被选中,通过更改Cell的背景色、文字颜色等方式展示选中状态。 - 添加`didSelectRowAt`方法,当用户点击Cell时,取消之前选中的Cell(如果有的话)...
这样,我们就实现了在不使用ViewPager的情况下,通过RadioButton切换Fragment并保持其状态。每次切换时,都会尝试从内存中恢复之前的状态,避免了反复创建和销毁Fragment,提高了应用的性能和用户体验。 总结,...
它允许用户在多个单选按钮中选择一个,当用户点击其中一个按钮时,RadioGroup会自动取消其他按钮的选中状态,确保同一时间只有一个按钮处于选中状态。RadioGroup通常用于创建多项选择题或者设置选项,例如在底部菜单...
全选按钮通常是一个单选按钮或普通按钮,点击后会将所有子项的复选框设置为选中状态。这需要在点击事件中遍历所有子项,调用`setChecked(true)`方法,并确保全选按钮的状态与所有子项的状态一致。 3. **每一项的...
复选框不支持DblClick事件,即双击事件,但可以通过编程设置其选中状态。 6. 关系模型:候选码是不含有多余属性的超码,它是能够唯一标识关系中元组的最小属性集。主码是候选码的一个实例,通常用于表的主键。 7. ...
单选按钮在同一组内只有一个可以被选中,复选框则可以同时选中多个。Value属性通常用于表示控件的状态,可能是0或1,但复选框的DblClick事件是可以响应的。 7. SQL查询:SELECT语句中的WHERE子句用于过滤满足特定...
当在一个RadioGroup内的RadioButton中选择一个时,其他所有RadioButton都会自动取消选中。 - 在TabHost的上下文中,RadioGroup可以作为标签的视觉表示,用户可以通过点击RadioGroup中的单选按钮来切换不同的Tab。 ...
在示例中,`radio1` 和 `rbRcvStr` 分别表示这两种模式,通过 `Checked` 属性控制其选中状态。 4. **打开和关闭串口**: - 使用 `SerialPort` 类的 `IsOpen` 属性判断串口是否已经打开,未打开时通过 `new ...
- Server.Transfer()和Response.End(),前者不返回响应,后者会。 26. **HTML编码**: - Server.HtmlEncode()方法用于转义HTML特殊字符。 27. **Application对象**: - 存储全局变量,生存期直到应用程序关闭,...
2.2.4 代码改变状态的通知 23 2.2.5 错误通知和辅助 23 2.3 工具箱 25 2.4 Solution Explorer 26 2.5 Server Explorer 28 2.6 Properties窗口 28 2.7 丢失的窗口 29 2.8 其他常见的Visual Studio操作 29 ...
2.7 丢失的窗口29 2.8 其他常见的Visual Studio操作29 2.8.1 创建新项目29 2.8.2 引用其他对象30 2.8.3 使用智能标记32 2.8.4 保存和导入 Visual Studio设置32 2.8.5 验证HTML34 2.8.6 团队的合作36 2.8.7 使用...