EditTextCell
でエディタがonBrowserEvent
法に示されているので、あなただけの必要があります。
public class MyEditTextCell extends EditTextCell {
@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
if(value == null || value.isEmpty())
super.onBrowserEvent(context, parent, value, event, valueUpdater);
}
}
は、編集した値を保存するために列にFieldUpdater
を追加するために、覚えておいてください。
ここでは一つだけString
を含む単純なテーブルタイプとの完全な作業例を持っています、
public class MyTableType {
private String value;
public MyTableType(String value) {
super();
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
CellTable<MyTableType> table = new CellTable<MyTableType>();
MyEditTextCell cell = new MyEditTextCell();
Column<MyTableType, String> column = new Column<MyTableType, String>(cell) {
@Override
public String getValue(MyTableType object) {
if(object.getValue() == null)
return "";
else
return object.getValue();
}
};
column.setFieldUpdater(new FieldUpdater<MyTableType, String>() {
@Override
public void update(int index, MyTableType object, String value) {
object.setValue(value);
}
});
table.addColumn(column, "Value");
ArrayList<MyTableType> values = new ArrayList<MyTableType>();
values.add(new MyTableType("one"));
values.add(new MyTableType("two"));
values.add(new MyTableType("three"));
values.add(new MyTableType(null));
values.add(new MyTableType(""));
table.setRowData(values);
してくださいあなたは非空にセルの値を編集したら、編集者が後に表示されないことに気づきますそれ。
私は 'edit()'メソッドをオーバーライドするべきではありませんか?代わりに 'onBrowserEvent()'をオーバーライドする必要がありますか? – masterdany88
'edit()'メソッドもオーバーライドする必要があります(実際はもっと良い解決策だと思います)。あなたのアプローチはOKであるはずです。おそらく、値がnullでないかどうかを確認する必要があります。 'getValue()'メソッドも参照してください。nullを返すべきではありません。 – Adam
おそらくそれはよりよい解決策ですが、生産上は機能しません!たぶん2.6.1バージョンのバグのようなものかもしれません。 – masterdany88