`
chaoming.yang
  • 浏览: 63794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RadioButton 保持选中状态不丢失

阅读更多
在使用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)}"/>
分享到:
评论

相关推荐

    WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中.rar

    5. 使用VisualStateManager:WPF提供了VisualStateManager来管理控件的视觉状态,可以尝试利用它来管理RadioButton的选中状态,确保状态的正确流转。 6. 更新WPF框架:如果这是一个已知的框架bug,尝试更新到最新...

    Android RadioButton与监听Demo源码.rar

    - 监听RadioButton的选中状态变化,通常有两种方式:一是使用 `OnCheckedChangeListener`,二是通过 `setOnClickListener`。 - `OnCheckedChangeListener` 是一个接口,包含 `onCheckedChanged()` 方法,当...

    viewpaper+fragment+radiobutton

    1. **`Fragment`的生命周期管理**:确保在正确的时间添加、替换或移除`Fragment`,以避免内存泄漏和状态丢失。 2. **`ViewPaper`的性能优化**:对于大量的文本或图像加载,需要考虑缓存策略、异步加载和内存管理,以...

    Android三级目录、ListView单选/GridView单选、ListView多选/GridView多选

    1. **背景变色**:在Adapter的getView()方法中,根据选中状态更改View的背景颜色。可以使用条件语句来判断当前项是否被选中,然后使用setBackgroundColor()或使用自定义Selector来改变背景。 2. **字体变色**:同样...

    android之listview和checkbox

    3.1 滑动时选中状态丢失:这是由于ListView重用视图导致的问题。为避免此问题,需要在getView()方法中,根据数据项的选中状态设置CheckBox的checked属性。 3.2 点击事件冲突:ListView的点击事件可能与CheckBox的...

    iOS TableView单选Demo

    - 在`cellForRowAt`中,根据`selectedIndexPath`判断当前Cell是否被选中,通过更改Cell的背景色、文字颜色等方式展示选中状态。 - 添加`didSelectRowAt`方法,当用户点击Cell时,取消之前选中的Cell(如果有的话)...

    Android 保存Fragment 切换状态实例代码

    这样,我们就实现了在不使用ViewPager的情况下,通过RadioButton切换Fragment并保持其状态。每次切换时,都会尝试从内存中恢复之前的状态,避免了反复创建和销毁Fragment,提高了应用的性能和用户体验。 总结,...

    RadioGroupFragment.zip

    它允许用户在多个单选按钮中选择一个,当用户点击其中一个按钮时,RadioGroup会自动取消其他按钮的选中状态,确保同一时间只有一个按钮处于选中状态。RadioGroup通常用于创建多项选择题或者设置选项,例如在底部菜单...

    复选框多选Demo

    全选按钮通常是一个单选按钮或普通按钮,点击后会将所有子项的复选框设置为选中状态。这需要在点击事件中遍历所有子项,调用`setChecked(true)`方法,并确保全选按钮的状态与所有子项的状态一致。 3. **每一项的...

    2021-2022计算机二级等级考试试题及答案No.16543.docx

    复选框不支持DblClick事件,即双击事件,但可以通过编程设置其选中状态。 6. 关系模型:候选码是不含有多余属性的超码,它是能够唯一标识关系中元组的最小属性集。主码是候选码的一个实例,通常用于表的主键。 7. ...

    2021-2022计算机二级等级考试试题及答案No.9534.docx

    单选按钮在同一组内只有一个可以被选中,复选框则可以同时选中多个。Value属性通常用于表示控件的状态,可能是0或1,但复选框的DblClick事件是可以响应的。 7. SQL查询:SELECT语句中的WHERE子句用于过滤满足特定...

    Fragment + TabHost + RadioGroup 结合DEMO

    当在一个RadioGroup内的RadioButton中选择一个时,其他所有RadioButton都会自动取消选中。 - 在TabHost的上下文中,RadioGroup可以作为标签的视觉表示,用户可以通过点击RadioGroup中的单选按钮来切换不同的Tab。 ...

    C#写串口通信简单代码

    在示例中,`radio1` 和 `rbRcvStr` 分别表示这两种模式,通过 `Checked` 属性控制其选中状态。 4. **打开和关闭串口**: - 使用 `SerialPort` 类的 `IsOpen` 属性判断串口是否已经打开,未打开时通过 `new ...

    2021信息工程Web开发技术复习概要.doc

    - Server.Transfer()和Response.End(),前者不返回响应,后者会。 26. **HTML编码**: - Server.HtmlEncode()方法用于转义HTML特殊字符。 27. **Application对象**: - 存储全局变量,生存期直到应用程序关闭,...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    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 ...

    ASP.NET2.0高级编程(第4版)1/6

    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 使用...

Global site tag (gtag.js) - Google Analytics