簡體   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