2017-12-20 25 views
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に戻ります。私はそのメソッドの中にブレークポイントを入れますが、決して解雇されません。私が間違っていることは何ですか?

+0

ActivityAttributeを表示してください。画面を回転させるときに 'OnDestory()'メソッドが呼び出されましたか? –

+0

ジョー、これはどういう意味ですか? [Activity(Label = "Casos AAA")] ...これはアクティビティの上にある唯一の属性です。画面を回転させたときにOnDestroy()が呼び出されたかどうかを知るにはどうすればよいですか?私もそれを無効にする必要がありますか? – SamyCode

+0

さて、もしアクティビティが 'onDestory()'を実行して画面を回転させたときに再作成した場合は、 'OnSaveInstanceState'が呼び出されるようにしたいのです。あなたがそれを解決してコピーして貼り付けるだけなら、おそらく回復するか、コードに問題はありません。良い 運がいいです。 –

答えて

0

私にとって奇妙な解決策は、オーバーライドされたメソッドを書き込む代わりに、それをコピーして貼り付けることでした。それから、ソリューションをクリーンにしてビルドしてください。

関連する問題