2017-12-20 9 views
0

SQLite 테이블을 다시 쿼리하지 않기 위해 장치 방향이 변경 될 때 일부 데이터를 유지하려고합니다. 내 코드는 다음과 같습니다.Xamarin 안드로이드 : 왜 Override 된 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이 반환됩니다. 나는 그 방법 안에 breakpoint를 두었지만 결코 해고 당하지 않는다. 내가 뭘 잘못하고 있니?

+0

ActivityAttribute를 보여 주실 수 있으시겠습니까? 화면을 회전시킬 때'OnDestory()'메서드가 호출 되었습니까? –

+0

조,이 말은 무엇입니까? [Activity (Label = "Casos AAA")] ... 활동 위에있는 유일한 속성입니다. 화면을 회전 할 때 OnDestroy()가 호출되는지 어떻게 알 수 있습니까? 나는 또한 그것을 무시해야합니까? – SamyCode

+0

좋아, 나는 액티비티가'onDestory()'를 실행하고 화면을 회전시킬 때 다시 만들면 다시 만들어서'OnSaveInstanceState'가 호출되도록하고 싶습니다. 복사하여 붙여 넣기 만하면 해결됩니다. 그렇지 않으면 코드에 문제가 없습니다. 좋은 운. –

답변

0

저에게 이상한 해결책은 오버라이드 된 메서드를 작성하는 대신 복사하여 붙여 넣는 것입니다. 그런 다음 솔루션을 깨끗하게 만들고 지금 작동합니다.