首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在方位变化时将数据以片段形式保存

在方位变化时将数据以片段形式保存
EN

Stack Overflow用户
提问于 2014-07-22 06:47:44
回答 1查看 620关注 0票数 1

我试图做的事情::我试图保存输入到编辑文本中的数据和旋转定向更改

正在发生的事情:我无法保存数据,如何解决这个问题

MainActivity.java

代码语言:javascript
复制
public class MainActivity extends FragmentActivity {

    Fragment_A frgObj;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        Log.d("MAIN-ACTIVITY", "onCreate");
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("MAIN-ACTIVITY", "onStart");
        frgObj=Fragment_A.newInstance();

        getSupportFragmentManager().beginTransaction().replace(R.id.container, frgObj).addToBackStack(null).commit();
    }

    public void onSaveInstanceState(Bundle outState){
           getSupportFragmentManager().putFragment(outState,"myfragment",frgObj);
        }
        public void onRetoreInstanceState(Bundle inState){
            frgObj = (Fragment_A) getSupportFragmentManager().getFragment(inState,"myfragment");
        }
}

Fragment_A.java

代码语言:javascript
复制
public class Fragment_A extends Fragment{

    Button btn;
    Spinner spinner;
    EditText editText;
    SeekBar seekBar;

    public static Fragment_A newInstance() {
        Log.d("FRAGMENT-A", "newInstance");

        Fragment_A fragment = new Fragment_A();
        return fragment;
    }

    @Override
    public void onAttach(Activity activity) {
        Log.d("FRAGMENT-A", "onAttach");
        super.onAttach(activity);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d("FRAGMENT-A", "onCreate");
        super.onCreate(savedInstanceState);


    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        Log.d("FRAGMENT-A", "onSaveInstanceState");

        super.onSaveInstanceState(outState);
        //City Spinner state
        outState.putString("editText", editText.getText().toString());
        outState.putInt("yourSpinner", spinner.getSelectedItemPosition());

    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Log.d("FRAGMENT-A", "onCreateView");
        View view=inflater.inflate(R.layout.fragment_a, container, false);

        btn=(Button) view.findViewById(R.id.buttonId1);
        spinner=(Spinner) view.findViewById(R.id.spinnerId1);
        editText=(EditText) view.findViewById(R.id.editTextId1);
        seekBar=(SeekBar) view.findViewById(R.id.seekBarId1);

        return view;
    }


    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        Log.d("FRAGMENT-A", "onActivityCreated");
        super.onActivityCreated(savedInstanceState);

         if (savedInstanceState != null) {
                //City Spinner state
             editText.setText(savedInstanceState.getString("editText"));
             spinner.setSelection(savedInstanceState.getInt("yourSpinner", 0));

            }       
    }

    @Override
    public void onStart() {
        Log.d("FRAGMENT-A", "onStart");
        super.onStart();

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("FRAGMENT-A", "button Clicked");

                Fragment_B frgObj=Fragment_B.newInstance();

                getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, frgObj,"Fragment_B").addToBackStack(null).commit();

            }
        });
    }

}
EN

回答 1

Stack Overflow用户

发布于 2014-07-22 06:59:31

我认为除了调用super.onSaveInstanceState(Bundle)之外,您不需要在您的活动中改变任何东西。在片段中保存数据onSaveInstanceState就足够了。我会将恢复逻辑放在onCreateView中而不是onActivityCreated中。无论何时重新创建片段,都可以保证调用onCreateView,但是onActivityCreated的情况并非如此。

您可以尝试的另一件事是,不要使用任何一种方法,而是使用setRetainInstance(true),它应该通过改变方向来保留实例变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24880616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档