Как обновить пользовательский интерфейс, не блокируя ввод от пользователя в Xamarin Android? - PullRequest
0 голосов
/ 28 декабря 2018

Мое приложение заблокировано, чтобы принимать пользовательский ввод, когда загружается listview, при этом не работает обратное нажатие и кнопки.

public void OnAnimationEnd(Animation animation)
{
       Task.Run(() => RunOnUiThread(dodo));
}

приведенный ниже код запускается, когда заканчивается анимация

public void dodo()
{
        AdRequest adRequest = new AdRequest.Builder().AddTestDevice(AdRequest.DeviceIdEmulator).Build();
        adView.LoadAd(adRequest);
        AccessFiles();

        adapter = new MyArryAdapter(this, Resource.Layout.AdaptView, CustomView.multipleData.ToList());
        listView.Adapter = adapter;


        adapter.NotifyDataSetChanged();
        pb.Visibility = ViewStates.Gone;
}

1 Ответ

0 голосов
/ 06 февраля 2019

Попробуйте это (мои извинения, у меня нет времени, чтобы проверить это в данный момент, так как я просматриваю вопросы, ожидая завершения сборок):

public async void OnAnimationEnd(Animation animation)
{
    await Task.Run(() => Dodo()).ConfigureAwait(false);
    RunOnUIThread(AssignDodoAdapter());
}

void Dodo()
{
    AdRequest adRequest = new 
 AdRequest.Builder().AddTestDevice(AdRequest.DeviceIdEmulator).Build();
    adView.LoadAd(adRequest);
    AccessFiles();
    adapter = new MyArryAdapter(this, Resource.Layout.AdaptView,  CustomView.multipleData.ToList());
}

void AssignDodoAdapter()
{
    listView.Adapter = adapter;
    adapter.NotifyDataSetChanged();
    pb.Visibility = ViewStates.Gone;
}

Примечание: я 'м, при условии, что адаптер, просмотр списка и т. д. представлены как поля, на которые можно ссылаться, как в вашем примере кода.

OnAnimationEnd () должен быть помечен как асинхронный.Он должен выполнять код в Dodo () в фоновом потоке (не в пользовательском интерфейсе), позволяя обрабатывать другие события в потоке пользовательского интерфейса, но, поскольку он ожидается, он не будет переходить к следующему блоку кода.После завершения задачи она должна запустить код в AssignDodoAdapter () в потоке пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...