发生这种情况是因为选择重新呈现了该行,因此丢失了您对此元素所做的任何更改。
我为此找到的解决方法是在单个单元格级别处理它。
在实践中,我将每个单元格包装成一个“StyleAwareCellDecorator”,它创建一个具有给定样式的跨度。然后我根据一些逻辑决定应用什么样式。在您的情况下,它可能基于 context.getIndex() 。
public class StyleAwareCellDecorator<C> extends AbtractCell<C> {
private final Cell<C> decorated;
private final MyLogic logic;
public StyleAwareCellDecorator( Cell<C> decorated, MyLogic logic ) {
this.decorated = decorated;
this.logic = logic;
}
void render(Context context, C value, SafeHtmlBuilder sb) {
String theCssClass = myLogic.decideWhatStyleToUse( context.getIndex() );
sb.append( ... some tag with class="theCssClass" ... );
delegated.render( context, value, sb );
sb.append( ... close tag ... );
}
}
有了这个设施,您可以将您的代码替换为:
MyLogic myCellStyleLogic;
myCellStyleLogic.useStyleForRowIndex( "style-name-A", 0 );
myCellStyleLogic.useStyleForRowIndex( "style-name-B", 1 );
假设将其存储在地图中