2017-02-14 31 views
0

我想在屏幕換算更改後保存並恢復片段中的數據。即使savedInstanceState不爲空,也無法在片段中顯示數據

爲此,我使用「onSaveInstanceState」方法來保存我的數據。

@Override 
public void onSaveInstanceState(Bundle outState) { 
    outState.putString("date", dateTextView.getText().toString()); 
    outState.putString("time", timeTextView.getText().toString()); 
    outState.putString("hour", hour); 
    outState.putString("minute", minute); 
    outState.putString("topicGroup", currentTopicGroup); 
    outState.putString("topic", currentTopicTitle); 
    outState.putString("level",currentLevelName); 
    outState.putDouble("totalPrice", totalPrice); 
    outState.putString("activityTitle", getActivity().getTitle().toString()); 
    super.onSaveInstanceState(outState); 
} 

但是,當我嘗試恢復/中包含了「onCreateView」方法來顯示我的數據,沒有任何反應即使「savedInstanceState」變量不爲空(我的日誌顯示正確的價值)。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_create_new_lesson, container, false); 

    timeTextView = (TextView) view.findViewById(R.id.time_picker_text_view); 
    dateTextView = (TextView) view.findViewById(R.id.date_picker_text_view); 
    hourSpinner = (Spinner) view.findViewById(R.id.hour_spinner); 
    minuteSpinner = (Spinner) view.findViewById(R.id.minut_spinner); 
    topicGroupSpinner = (Spinner) view.findViewById(R.id.topic_group_spinner); 
    topicSpinner = (Spinner) view.findViewById(R.id.topic_spinner); 
    levelSpinner = (Spinner) view.findViewById(R.id.level_spinner); 
    totalPriceTextView = (TextView) view.findViewById(R.id.total_price_text_view); 
    datePickerButton = (Button) view.findViewById(R.id.date_picker_button); 
    timePickerButton = (Button) view.findViewById(R.id.time_picker_button); 
    createNewLessonButton = (Button) view.findViewById(R.id.create_new_lesson_button); 

    if (savedInstanceState != null) { 
     String time = savedInstanceState.getString("time"); 
     Log.i("TIME", time); 

     getActivity().setTitle(time); 
     dateTextView.setText(savedInstanceState.getString("date")); 
     timeTextView.setText(savedInstanceState.getString("time")); 

     int hourPosition = getIndexByString(hourSpinner, savedInstanceState.getString("hour")); 
     int minutePosition = getIndexByString(minuteSpinner, savedInstanceState.getString("minute")); 
     int topicGroupPosition = getIndexByString(topicGroupSpinner, savedInstanceState.getString("topicGroup")); 

     hourSpinner.setSelection(hourPosition); 
     minuteSpinner.setSelection(minutePosition); 
     topicGroupSpinner.setSelection(topicGroupPosition); 
    } 


    return view; 
} 

我嘗試了許多沒有成功的事情。有人會有任何建議給我嗎?提前致謝。

回答

0

問題出在您嘗試恢復視圖狀態的地方。 請看:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ... 
    if (savedInstanceState != null) { 
     //Restore the fragment's state here 
    } 
} 
... 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

//Save the fragment's state here 
} 

的話題已經在深入評論在計算器上。 只要看看,你會發現很多關於savedState並恢復它。 Fragment's SavedState and Restoring It

+0

我試過這個解決方案也。但我有同樣的問題。 「savedInstanceState」不爲null,但我可以在文本視圖中顯示我的數據。 – Wivi0

+0

@Override public void onActivityCreated(Bundle savedInstanceState) –

+0

不在onCreateView(),你確定你在這裏,而不是在onCreateView()? –

0

問題是每次創建並添加具有空束數據的新Fragment實例時。同時加入在活動新Fragment做如下

在活動onCreate()或任何你添加的片段做如下

if (savedInstanceState == null) { 
    getSupportFragmentManager().beginTransaction().add(R.id.frag_container, new Frag1()).commit(); 
} 
+0

同上。我試過這個解決方案。但我總是有同樣的問題。我無法顯示我的片段的數據。 – Wivi0

+0

在您添加片段的活動中發佈代碼 – arjun

相關問題