Я создал собственный ListBoxItem в Delphi xe6 (на основе ответа @MikeSutton в этом сообщении Какой элемент управления следует использовать для создания этого пользовательского интерфейса в Delphi Firemonkey)
У меня там 2 TNumberBox
и 2 TLabels
. Это мой пользовательский элемент списка
TListBoxItemMatchBet = class(TListBoxItem)
private
....
//some other methods and properties
fLeftValue: integer;
procedure setLeftValue(const Value: integer);
procedure setLeftValueStyle();
procedure LeftValueChange(Sender: Tobject);
protected
procedure ApplyStyle; override;
published
property Text: string read fText write setText;
property LeftValue: integer read fLeftValue write setLeftValue;
property RightValue: integer read fRightValue write setRightValue;
end;
procedure TListBoxItemMatchBet.setLeftValue(const Value: integer);
begin
fLeftValue := Value;
setLeftValueStyle();
end;
procedure TListBoxItemMatchBet.setLeftValueStyle;
var
O: TFMXObject;
begin
O := FindStyleResource('nmbLeft'); // StyleName of the item
if O is TNumberBox then
begin
TNumberBox(O).ValueType := TNumValueType.Integer;
TNumberBox(O).Value := fLeftValue;
TNumberBox(O).OnChange := LeftValueChange;
end;
end;
procedure TListBoxItemMatchBet.ApplyStyle;
begin
inherited;
setTextStyle();
setLeftValueStyle();
setRightValueStyle();
end;
procedure TListBoxItemMatchBet.LeftValueChange(Sender: Tobject);
begin
fLeftValue := round((Sender as TNumberBox).Value);
end;
все в порядке, если только у меня нет много (около 20) элементов в моем списке, и я прокручиваю вверх, когда я прокручиваю вниз, значение числовых полей изменится на другие записи (например, когда значение равно 50, когда я прокручиваю элемент назад, его значение будет измените на что-то еще, например, 10 и 50 перейдут к другому элементу списка).
Это поведение на симуляторе Android и Iphone.
Вот скриншот.
Значения настроек (верхние правые столбцы)
Прокрутить вверх
Прокрутить вниз
Ценности исчезли