【问题标题】:MvxAutoCompleteTextView dropdown re-opens on every keypressMvxAutoCompleteTextView 下拉菜单在每次按键时重新打开
【发布时间】:2017-09-08 11:50:25
【问题描述】:

我有一个问题,即在用户每次按键时,AutoCompleteTextView 都会快速隐藏并再次出现(使用一组更新的值)。

请建议我的问题可能出在哪里以及您是否发现以下代码有任何其他问题。

在视图中绑定:

bindingSet
   .Bind(emailAutoCompleteTextView)
   .For(t => t.Text)
   .To(vm => vm.Email);

bindingSet
    .Bind(emailAutoCompleteTextView)
    .For(t => t.PartialText)
    .To(vm => vm.CurrentEmailEntry);

bindingSet
    .Bind(emailAutoCompleteTextView)
    .For(t => t.ItemsSource)
    .To(vm => vm.CurrentEmailAutoCompleteSuggestions);

AXML 布局:

<mvvmcross.droid.support.v7.appcompat.widget.MvxAppCompatAutoCompleteTextView
    android:id="@+id/EmailAutoCompleteTextView"
    android:layout_marginTop="@dimen/PaddingBetweenUserInputFields"
    android:completionThreshold="1"
    android:inputType="textEmailAddress" />

查看型号代码:

private string _currentEmailEntry;

public string CurrentEmailEntry
{
    get
    {
        return _currentEmailEntry;
    }
    set
    {
        _currentEmailEntry = value;

        if (value == string.Empty)
        {
            _currentEmailEntry = null;
        }

        CurrentEmailAutoCompleteSuggestions = _emailAutoCompleteList
            .Where(email => email.StartsWith(_currentEmailEntry, StringComparison.OrdinalIgnoreCase))
            .ToArray();

        RaisePropertyChanged(nameof(CurrentEmailEntry));
    }
}        

private static readonly string[] _emailAutoCompleteList = {"Gordon", "Gordy", "Go", "Freeman", "Is", "Alive"};

private IList<string> _currentEmailAutoCompleteSuggestions = _emailAutoCompleteList.ToList();

public IList<string> CurrentEmailAutoCompleteSuggestions
{
    get { return _currentEmailAutoCompleteSuggestions; }
    set
    {
        if (ReferenceEquals(_currentEmailAutoCompleteSuggestions, value))
            return;

        _currentEmailAutoCompleteSuggestions = value;

        RaisePropertyChanged(nameof(CurrentEmailAutoCompleteSuggestions));
    }
} 

我使用 MvvmCross 4.0(不能升级)。

注意:我尝试使用 ObservableCollection 而不是 IList 并向其中删除/添加项目(不重新分配集合本身),但之后 CurrentEmailEntry 的设置器在用户键入后停止接收值第一个字符进入文本视图。 MvxFilteringAdapter 中的代码似乎一直在等待重置事件。

【问题讨论】:

    标签: android xamarin mvvmcross autocompletetextview


    【解决方案1】:

    由于这里或 MvvmCross Xamarin Slack 频道上没有人回答,我最终自己找到了解决方案。

    重新创建绑定到ItemsSource 的列表导致了有问题的奇怪行为。

    ObservableCollectionClear()/Add() 代替重新创建确实是要走的路。上一个问题段落中描述的卡住行为(等待重置事件)是由于缺少正确的线程调度(我的应用程序是多线程的)造成的。

    只要我用一个总是在 UI 线程上引发CollectionChanged 事件的代理集合包装我的 observable 集合,问题就消失了。

    为了后代的利益,把它留在这里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-27
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多