0
SQLiteテーブルを再度クエリーしないために、デバイスの向きが変わったときにデータを保持しようとしています。私のコードは次のとおりです。Xamarin Android:なぜOverriden OnSaveInstanceStateは呼び出されませんか?
SfDataGrid grid;
string jsonData;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.CaseControl);
RelativeLayout layout = FindViewById<RelativeLayout>(Resource.Id.layoutCasos);
grid = new SfDataGrid(this);
grid.AllowResizingColumn = true;
grid.AllowSorting = true;
layout.AddView(grid);
if (savedInstanceState != null)
{
string savedJsonData = savedInstanceState.GetString("jsonData");
grid.ItemsSource = JsonConvert.DeserializeObject<TableQuery<v_Casos>>(savedJsonData);
}
else
{
string dpPath = Path.Combine("/data/data/TPProject.TPProject/files/", "PranfHurto.db3");
var db = new SQLiteConnection(dpPath);
var data = db.Table<v_Casos>();
grid.ItemsSource = data;
jsonData = JsonConvert.SerializeObject(data);
}
grid.SelectionMode = SelectionMode.Single;
grid.GridLongPressed += RowLongPress;
}
protected override void OnSaveInstanceState(Bundle outState)
{
outState.PutString("jsonData", jsonData);
base.OnSaveInstanceState(outState);
}
ご覧のとおり、jsonDataをoutStateの内側に配置します。ただし、デバイスの向きが変更されると、常にnullに戻ります。私はそのメソッドの中にブレークポイントを入れますが、決して解雇されません。私が間違っていることは何ですか?
ActivityAttributeを表示してください。画面を回転させるときに 'OnDestory()'メソッドが呼び出されましたか? –
ジョー、これはどういう意味ですか? [Activity(Label = "Casos AAA")] ...これはアクティビティの上にある唯一の属性です。画面を回転させたときにOnDestroy()が呼び出されたかどうかを知るにはどうすればよいですか?私もそれを無効にする必要がありますか? – SamyCode
さて、もしアクティビティが 'onDestory()'を実行して画面を回転させたときに再作成した場合は、 'OnSaveInstanceState'が呼び出されるようにしたいのです。あなたがそれを解決してコピーして貼り付けるだけなら、おそらく回復するか、コードに問題はありません。良い 運がいいです。 –