繁体   English   中英

保存片段状态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM