如何使用onSaveInstanceState()和onRestoreInstanceState()方法在EditText上保存所需的数据

时间:2016-12-03 17:34:38

标签: android android-activity sdk android-sdk-tools activity-lifecycle

我正在尝试设计一个Android应用程序,在该应用程序中,我已将第一个活动的数据发送到第二个活动。在第二个活动中,我正在使用此代码

count

当应用程序移动到横向到纵向模式时保存数据,但在我的应用程序中,即使我正在使用这两个,但数据没有被保存。在轮换时,数据被摧毁,应用程序在 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); }视图中。

请检查下面的代码,给出建议我在哪里做错了保存数据
MainActivity.java

EditText

SecondClass.java

public class MainActivity extends AppCompatActivity {
    EditText name,age;
    TextView text_name,text_age;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name=(EditText) findViewById(R.id.name);
        age=(EditText) findViewById(R.id.age);
        text_name=(TextView) findViewById(R.id.name_edit);
        text_age=(TextView) findViewById(R.id.name_age);
        btn=(Button) findViewById(R.id.click);

        //Button Click to send data to another activity

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bundle bundle=new Bundle();
                String user_name=name.getText().toString();
                String user_age=age.getText().toString();
                bundle.putString("UName",user_name);
                bundle.putString("UAge",user_age);
                Intent intent=new Intent(MainActivity.this,SecondClass.class);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }
    
}

1 个答案:

答案 0 :(得分:0)

您使用密钥在已保存的实例中输入并获取值,然后首先将数据放入 'outState'然后调用'

  

super.onSaveInstanceState(outState);

试试这个:

public class SecondClass extends Activity {
    private static final String SAVED_NAME="savedName";
    private static final String SAVED_AGE="savedAge";
    EditText name,age;
    TextView text_name,text_age;
    String namer,ager;
    private String savedName,savedAge;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity_layout);
        name=(EditText) findViewById(R.id.name);
        age=(EditText) findViewById(R.id.age);
        text_name=(TextView) findViewById(R.id.name_edit);
        text_age=(TextView) findViewById(R.id.name_age);

        if (savedInstanceState!=null)
        {
            namer  = savedInstanceState.get(SAVED_NAME);
            name.setText(namer);
            ager = savedInstanceState.get(SAVED_AGE);
            age.setText(ager);
        }
        if (savedInstanceState==null)
        {
            Intent i=getIntent();
            Bundle bundle=i.getExtras();
            namer=bundle.getString("UName");
            name.setText(namer);
            ager=bundle.getString("UAge");
            age.setText(ager);
        }

    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putString(savedName,namer);
        outState.putString(savedAge,ager);
        super.onSaveInstanceState(outState);
        
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if (savedInstanceState!=null)
        {
            namer  = savedInstanceState.get(SAVED_NAME);
            name.setText(namer);
            ager = savedInstanceState.get(SAVED_AGE);
            age.setText(ager);
        }
        if (savedInstanceState==null)
        {
            Intent i=getIntent();
            Bundle bundle=i.getExtras();
            namer=bundle.getString("UName");
            name.setText(namer);
            ager=bundle.getString("UAge");
            age.setText(ager);
        }

    }
}

相关问题