Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onSaveInstanceState()不是';我的碎片没有被召唤_Android_Tabs_Fragment - Fatal编程技术网

Android onSaveInstanceState()不是';我的碎片没有被召唤

Android onSaveInstanceState()不是';我的碎片没有被召唤,android,tabs,fragment,Android,Tabs,Fragment,当我按下home按钮时,片段中的数据被保存,但当我切换到另一个片段时,该方法甚至没有被调用 我甚至尝试将setRetainInstance()设置为false,但它仍然没有调用该函数 RedFragment.java import com.actionbarsherlock.app.SherlockFragment; import android.content.Context; import android.os.Bundle; import android.app.Activity; im

当我按下home按钮时,片段中的数据被保存,但当我切换到另一个片段时,该方法甚至没有被调用

我甚至尝试将setRetainInstance()设置为false,但它仍然没有调用该函数

RedFragment.java

import com.actionbarsherlock.app.SherlockFragment;

import android.content.Context;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;

import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;

public class RedScorerFragment extends SherlockFragment {


    LayoutInflater infl;
    GridView mGrid;

    EditText[] etCollection;

    EditText mText;

    int R1C1, R1C2;
    String R1C3="";

    View tView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        infl = inflater;
        //super.onCreate(savedInstanceState);
        View mView = inflater.inflate(R.layout.fragment_score_red, container, false);
        mGrid = (GridView) mView.findViewById(R.id.gridViewRed);


        setRetainInstance(false);//Do I need this?

        tView = container.getRootView();




        /*if(savedInstanceState != null)
        {
            //R1C1 = savedInstanceState.getInt("R1C1");
            R1C2 = savedInstanceState.getInt("R1C2");
            R1C3 = savedInstanceState.getString("R1C3");

            //Log.d("savedd R1C1 ", String.valueOf(R1C1));
            Log.d("savedd R1C2 ", String.valueOf(R1C2));
            Log.d("savedd R1C3 ", String.valueOf(R1C3));
        }
        */

        mGrid.setAdapter(new ImageAdapter(getActivity()));
        return mView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);

        if(savedInstanceState != null)
        {
            //R1C1 = savedInstanceState.getInt("R1C1", 0);
            R1C2 = savedInstanceState.getInt("R1C2", 0);
            R1C3 = savedInstanceState.getString("R1C3");

            //Log.v("saved R1C1 ", String.valueOf(R1C1));
            Log.v("saved R1C2 ", String.valueOf(R1C2));
            Log.v("saved R1C3 ", R1C3);
        }
        else
            Log.w("instance state", "The instance state was null");

        //Log.v("saved R1C1 ", String.valueOf(R1C1));
        //Log.v("saved R1C2 ", String.valueOf(R1C2));
        //Log.v("saved R1C3 ", String.valueOf(R1C3));
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState){
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putInt("R1C2", Integer.valueOf(etCollection[4].getText().toString()));

        Log.v("Saving", etCollection[0].getText().toString());


        savedInstanceState.putString("R1C3", etCollection[4].getText().toString());


    }

    public class ImageAdapter extends BaseAdapter{

        Context context;




        public ImageAdapter(Context context)
        {
            this.context = context;
            etCollection  = new EditText[getCount()];
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View myView = convertView;
            //LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            if(convertView == null)
            {
                LayoutInflater li = infl;
                myView= li.inflate(R.layout.grid_items, null);


            }

            EditText editText = (EditText) myView.findViewById(R.id.grid_item_edit_text_red);
            etCollection[position] = editText;

            EditText oText = (EditText)tView.findViewById(R.id.grid_item_edit_text_red);
            etCollection[0] = oText;
            return myView;
        }

        @Override
        public int getCount() {

            return 9;//only 9 
        }

        @Override
        public Object getItem(int position) {
            Log.w("etCollection: " + position , etCollection[position].getText().toString() );
            return etCollection[position];
        }

        @Override
        public long getItemId(int position) {

            return 0;//mGrid.getItemIdAtPosition(position);
        }


    }


}
但是当我切换到另一个片段时,该方法甚至没有被调用


那是因为当时不应该叫它。在活动上调用
onSaveInstanceState()
时将调用它,它将在
onPause()
onStop()
事件中及其周围调用。

那么我应该在活动或片段中保存
onPause()
事件中的值吗?@rasen58:我无法回答这个问题
onSaveInstanceState()
仅适用于应在配置更改等事件中幸存的瞬态数据。@rasen58:因为它不是我的数据,也不是我的应用程序。我能告诉你的就是
onSaveInstanceState()
的正确用法和行为。