В моем проекте формы xamarin у меня есть экран со списком, содержащим количество элементов ввода и других элементов управления. Для ввода я определил функциональность для событий text_changed, focus и unocus. и запись имеет десятичную клавиатуру (принимает только десятичную).
Выпуск: Когда я пытаюсь ввести номер, ожидаемое поведение должно запускать text_changed, но оно запускает событие нефокусировки и фокусировки также два раза.
[Введите текст-> text_changed-> unocus-> focus-> unocus-> focus]. Из-за этого вся моя логика, написанная в соответствующих событиях, перетасовывается и показывает странное поведение.
И этот работает как ожидается в iOS, показывая эту проблему только в Android.
Код:Ввод управления фокус нефокус событие запускается случайно внутри списка в форме xamarin
<DataTemplate x:Key="Numeric">
<ViewCell>
<ViewCell.View>
<StackLayout Padding="0">
<StackLayout Spacing="0" Padding="10">
<Grid ColumnSpacing="0" Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<controls:CustomLabel Text="{Binding .Question}" Style="{StaticResource ListItemInspectionLabelStyleWordwrap}" HorizontalOptions="Start" VerticalOptions="Start" Grid.Row="0" Grid.Column="0" />
<controls:CustomEntry x:Name="InputEntry" IsEnabled="{Binding .CanRespond}" FontSize="12" TextChanged="OnNumericTextChanged" HeightRequest="50" Keyboard="Numeric" Focused="OnNumericFocus" Unfocused="OnNumericUnFocus" HorizontalOptions="FillAndExpand" VerticalOptions="End"
ClassId="{Binding .QuestionId}" Grid.Row="1" Grid.Column="0" />
<controls:ExtendedLabel x:Name="NumberHint" TextColor="#71797B" LineBreakMode="NoWrap" Text="{Binding NumericFieldTitle}" Style="{StaticResource ListItemInspectionLabelStyleWordwrap}"
HorizontalOptions="Start" VerticalOptions="Start" Grid.Row="2" Grid.Column="0" />
</Grid>
</StackLayout>
<BoxView Style="{StaticResource ListDividerStyle}" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
Для Входа я написал визуализатор для некоторого выравнивания:
[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))]
namespace Inspect.Droid
{
public class CustomEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
Control.SetBackgroundColor(global::Android.Graphics.Color.Rgb(230, 230, 230));
Control.SetTextColor(global::Android.Graphics.Color.Black);
var nativeEditText = (global::Android.Widget.EditText)Control;
nativeEditText.SetTextColor(Android.Graphics.Color.Black);
nativeEditText.SetBackgroundResource(Resource.Drawable.inspection_editor_background);
nativeEditText.SetPadding(30, 0, 0, 0);
nativeEditText.Gravity = Android.Views.GravityFlags.CenterVertical;
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
var nativeEditText = (global::Android.Widget.EditText)Control;
nativeEditText.SetPadding(30, 0, 0, 0);
nativeEditText.Gravity = Android.Views.GravityFlags.CenterVertical;
}
}
}
Даже я видел несколько сообщений, указавших на тот же вопрос, но не получил каких-либо решений/Работа обходные , Тот же вопрос, как сообщается в xamarin bugzilla и Selecting Entry Controls Within ViewCells Causes FocusChange Cycle и в других link
Поскольку мои требования работают только на этих событиях я не имею никакого другого способа его реализацию. Пожалуйста, предложите мне любое решение/временное решение или подсказку/ссылку для этой реализации.
Спасибо
Отлично !!! Теперь это работает как шарм. – Suchith
Я попробовал это, и теперь мой список просто не отображается вообще. OnLayout вызывается 3 раза, при этом true/false/false – Julien
обновляется до следующего комментария: нажатие на экран вызывает прохождение макета по любой причине и только затем отображает список. на данный момент проблема исправлена, но я не могу ожидать, что люди коснутся экрана, чтобы отобразить пользовательский интерфейс – Julien