[英]Saving Fragment state
在這里,我試圖保存我的片段狀態。 但是我在保存狀態時遇到了空指針異常。請幫忙,謝謝。 我已粘貼代碼和錯誤以供參考
List_View_Fragment.java
package com.example.testfragment;
import java.util.ArrayList;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ListView;
public class List_View_Fragment extends Fragment {
ListView list;
EditText et;
EditText_Adapter aa;
ArrayList<String> Items;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// if(savedInstanceState != null){
// Toast.makeText(getActivity(), "save instance is not null", Toast.LENGTH_LONG).show();
// }
};
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
Items = new ArrayList<String>();
Items.add("");
Items.add("");
Items.add("");
Items.add("");
View view = inflater.inflate(R.layout.list_view, container, false);
list = (ListView) view.findViewById(R.id.MyList);
if (aa == null) {
aa = new EditText_Adapter(view.getContext(),
R.layout.list_view_edit_text, Items);
}
list.setAdapter(aa);
return view;
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
List_View_Fragment lf = (List_View_Fragment)getFragmentManager().findFragmentById(R.id.fragment_container);
**List_View_Fragment.SavedState myFragmentState = getFragmentManager().saveFragmentInstanceState(lf);
outState.putParcelable("key", myFragmentState);**
};
}
失誤
06-17 11:37:56.235: E/AndroidRuntime(31080): FATAL EXCEPTION: main
06-17 11:37:56.235: E/AndroidRuntime(31080): java.lang.StackOverflowError
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfragment.List_View_Fragment.onSaveInstanceState(List_View_Fragment.java:51)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1578)
06-17 11:37:56.235: E/AndroidRuntime(31080): at android.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:590)
06-17 11:37:56.235: E/AndroidRuntime(31080): at com.example.testfrag
您的代碼中有一個無限循環,我不確定為什么,但是似乎
List_View_Fragment.SavedState myFragmentState = getFragmentManager().saveFragmentInstanceState(lf)
挑釁了這種行為。 我建議您刪除此行並保存視圖的狀態(TextViews,EditText等),然后在onActivityCreated
方法中(在片段內部)恢復這些元素的值。
希望能幫助到你
您應該使用setRetainInstance(true)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.