スタック オーバーフローさん、こんにちは。
問題
最初の (メイン) Android アクティビティを実行して画面の向きを変更すると、アプリは正常に動作し、向きを変更し続けることができ、引き続き機能します。
最初のアクティビティのボタンをクリックして 2 番目のアクティビティに移動すると、画面が変わり、すべてが正常に読み込まれ、上下にスクロールします (すべて問題ないようです)。
ただし、ここで (2 番目のアクティビティで) 方向を切り替えると、アクティビティはログ エラーなしで終了し、最初のアクティビティに戻ります。
私の質問は、画面の向きを切り替える機能を保持し、2 番目のアクティビティを閉じないようにするにはどうすればよいですか? 何が原因なのかわからない。画面の向きが変わるたびに、アクティビティを破棄して再作成する必要があることを読みました。しかし、最初のアクティビティに取り組んでいるのに、なぜ 2 番目のアクティビティに取り組んでいないのでしょうか?
最初のアクティビティ コードは次のとおりです。
[Activity(Label = "FishinTales: Main Menu", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity_View_MainMenu : Activity
{
#region Components
private Model n_model;
private GridView n_mainMenuGridView;
#endregion
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
/*
Load data using if statements. Load serializeable if no settings file.
Or create new and test if it is accurately passing the custom class to another activity.
*/
if (((MyApp) this.ApplicationContext).FishingData == null)
{
((MyApp) this.ApplicationContext).LoadFishinTales();
this.n_model = ((MyApp) this.ApplicationContext).FishingData;
}
else
{
this.n_model = ((MyApp) this.ApplicationContext).FishingData;
}
// Set our view from the "View_MainMenu" layout resource
SetContentView(Resource.Layout.View_MainMenu);
this.n_mainMenuGridView = FindViewById<GridView> (Resource.Id.xml_mainMenuGridView);
this.n_mainMenuGridView.SetNumColumns(2);
this.n_mainMenuGridView.Adapter = new MainMenuGridAdapter (this);
this.n_mainMenuGridView.ItemClick += (o, e) => {
if (e.Position == 0)
{
// Navigate to Fish Species
Intent intent = new Intent(this, typeof(Activity_View_FishSpecies));
this.StartActivityForResult(intent, RequestCodes.View_FishSpecies);
}
else if (e.Position == 1)
{
// Navigate to My Favorite Spots
Toast.MakeText(this, "TODO: Navigate to My Favorite Sports", ToastLength.Long).Show();
//Intent intent = new Intent(this, typeof(View_MyFavoriteSpots));
//this.StartActivityForResult(intent, RequestCodes.View_MyFavoriteSpots);
}
else if (e.Position == 2)
{
// Navigate to My Season
Toast.MakeText(this, "TODO: Navigate to My Season", ToastLength.Long).Show();
//Intent intent = new Intent(this, typeof(View_MySeason));
//this.StartActivityForResult(intent, RequestCodes.View_MySeason);
}
else if (e.Position == 3)
{
// Navigate to Inventory
Toast.MakeText(this, "TODO: Navigate to Inventory", ToastLength.Long).Show();
//Intent intent = new Intent(this, typeof(View_Inventory));
//this.StartActivityForResult(intent, RequestCodes.View_Inventory);
}
else if (e.Position == 4)
{
// Navigate to Fishing News
Toast.MakeText(this, "TODO: Navigate to Fishing News", ToastLength.Long).Show();
//Intent intent = new Intent(this, typeof(View_FishingNews));
//this.StartActivityForResult(intent, RequestCodes.View_FishingNews);
}
else if (e.Position == 5)
{
// Navigate to Settings
Toast.MakeText(this, "TODO: Navigate to Settings", ToastLength.Long).Show();
//Intent intent = new Intent(this, typeof(View_Settings));
//this.StartActivityForResult(intent, RequestCodes.View_Settings);
}
else
{
// Invalid Response
Toast.MakeText(this, "Invalid Menu Selection", ToastLength.Long).Show();
}
};
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
// Possibly save data after activity result.?.
}
}
そして、これが私の最初のアクティビティの画像です(向きを問題なく変更するもの):
2 番目のアクティビティ コードは次のとおりです。
[Activity(Label = "FishinTales: Fish Species")]
public class Activity_View_FishSpecies : Activity
{
#region Components
private Model n_model;
private ListView n_fishSpeciesListView;
#endregion
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Get Application Global Model
this.n_model = ((MyApp) this.ApplicationContext).FishingData;
// Set our view from the "View_FishSpecies" layout resource
SetContentView(Resource.Layout.View_FishSpecies);
this.n_fishSpeciesListView = FindViewById<ListView> (Resource.Id.xml_fishSpeciesListView);
this.n_fishSpeciesListView.Adapter = new FishSpeciesListAdapter (this.ApplicationContext, this.n_model.SpecieManager.Species);
}
}
そして、これが私の2番目のアクティビティの画像です(携帯電話を傾けて横向きに設定しようとすると閉じます):
なぜこれが起こっているのか、さらに良いことに、この場合の良い回避策は何ですか? 画面を特定の向きのままにしたくないことに注意してください。ユーザーが2つを閉じずに切り替えることができれば幸いです。読んでくれてありがとう。