XamarinでVS2015を使用して、スプラッシュスクリーンを表示し、WebページをWebビューにロードできるマルチプラットフォームプロジェクトを作成しています。これが私のプロジェクト構造です。私は以下のようなPCLプロジェクトタイプを使用しています:
TheApp(ポータブル)
-WebPageHoster.Xaml //Contains a WebView control
-WebPageHoster.Xaml.cs //sets the WebView controls source property to load a webpage
-App.Xaml
-App.Xaml.cs
TheApp.Droid
/Resources/drawable/splashlogo.png
/Resources/drawable/icon3.png
/Resources/values/Styles.xml
-MainActivity.cs
-SplashActivity.cs
TheApp.iOS
TheApp.WindowsPhone(Windows Phone 8.1)
これはStyles.xml
のコードです
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="Theme.Splash" parent="Android:Theme">
<item name="Android:windowBackground">@drawable/splashlogo</item>
<item name="Android:windowNoTitle">true</item>
</style>
</resources>
SplashActivity.cs
[Activity(MainLauncher = true, NoHistory = true, Theme = "@style/Theme.Splash", Icon = "@drawable/icon3")]
public class SplashActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var intent = new Intent(this, typeof(MainActivity));
StartActivity(intent);
Finish();
}
}
MainActivity.cs
[Activity(Label = "Splash App", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App()); // << Problem here
}
上記のLoadApplication
メソッドのOnCreate
メソッド呼び出しは、次のコードを実行するApp.Xaml.csクラスのアプリコンストラクターを読み込みます。
public App(){InitializeComponent(); MainPage = new NavigationPage(new WebPageHoster(){Title = "Load Web-Page"}); }
これはスプラッシュ画面を示し、WebViewのURLを設定した後、OnCreateメソッドに戻り、このエラーが発生します
System.NullReferenceException: Object reference not set to an instance of an object
このエラーの原因を見つけることができません。これがAndroidマニフェストファイルです。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="TheApp.TheApp" Android:installLocation="auto" Android:versionCode="1">
<uses-sdk Android:minSdkVersion="15" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.CHANGE_NETWORK_STATE" />
<application Android:icon="@drawable/icon3" Android:theme="@style/Theme.AppCompat" Android:label="Splash Web Host"></application>
</manifest>
私はあなたのソースコードをテストしました、そしてあなたのMainActivity
はFormsAppCompatActivity
から派生します。その場合、AppCompat
を使用するテーマを提供する必要があります。
それを解決するために、私はあなたのスタイルにAppCompat
テーマを追加しました:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
</style>
そしてそれをあなたのMainActivity
で使用しました:
[Activity(Label = "Southern Travel", Theme = "@style/AppTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity