Изображение не будет отображаться в contentview

#android #multithreading #android-layout #xamarin #android-imageview

#Android #многопоточность #android-макет #xamarin #android-imageview

Вопрос:

У Xamarin меня есть простое Activity , которое загружается с пятисекундным ожиданием перед Activity загрузкой другого.

В первом Activity есть изображение как часть Layout , но это изображение не отображается.

Вот мой Activity код:

 protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    SetContentView (Resource.Layout.SplashActivity);

    Thread.Sleep(5000);

    var testActivity = new Intent (this, typeof(TestStartup));
    StartActivity (testActivity);
}
 

Вот мой SplashActivity код макета:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background_color">
    <ImageView
        android:src="@drawable/Splash"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@ id/SplashImage"
        android:layout_gravity="center_vertical" />
</LinearLayout>
 

Приложение ожидает пять секунд, а затем Activity загружается TestStartup, однако изображение не отображается в течение пяти секунд ожидания. Как я могу отобразить это изображение, пока Activity ожидание составляет пять секунд?

Могу ли я, пожалуйста, получить некоторую помощь с этим кодом?

Заранее спасибо

Ответ №1:

Оно не отображается, потому что вы блокируете поток пользовательского интерфейса с

 Thread.Sleep(5000);
 

Вы должны избавиться от такого рода логики. Полагаться на x secs него всегда неправильно. Ожидаемое вами вычисление может быть готово раньше, что делает оставшийся период ожидания огромным или может потребовать большего x secs . Для "fix" вашей проблемы вы можете использовать Handler.postDelayed(Runnable, 5000) и поместить логику, которую вам нужно выполнить внутри run метода. Таким образом, по крайней мере, поток пользовательского интерфейса не будет заблокирован

Ответ №2:

Возможно, вы захотите взглянуть на руководство Xamarin по созданию заставок в Android:

http://developer.xamarin.com/guides/android/user_interface/creating_a_splash_screen/

Похоже, вы были на правильном пути, но они используют тему, а не устанавливают представление содержимого. Как упоминалось ранее, ваш макет не отображается, потому что ваш метод ожидания блокирует поток пользовательского интерфейса. Использование темы — хороший способ обойти это, и вы можете повторно использовать многое из того, что у вас уже есть.