Android 학습 소결 의 Activity 저장 및 복구 상태

Android 에서 Activity 를 시작 합 니 다.홈 키 를 누 르 면 이 Activity 는 삭제 되 지 않 지만,어떤 작업 을 진행 할 때 일부 데 이 터 를 잃 어 버 립 니 다.다음 과 같 습 니 다.
Java class:

package com.king.activitytest2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText editText;
private Button buttonSet,buttonRead;
//      
double pai;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//    
editText=(EditText)findViewById(R.id.edit1);
buttonSet=(Button) findViewById(R.id.btn_Set);
buttonRead=(Button) findViewById(R.id.btn_Read);
//      
buttonSet.setOnClickListener(this);
buttonRead.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_Set:
editText.setText("    :");
pai=3.141592654;
break;
case R.id.btn_Read:
String str=editText.getText().toString()+pai;
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
break;
}
}
}
xml 레이아웃 파일:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.king.activitytest2.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="  "
android:id="@+id/btn_Set"
android:layout_marginTop="46dp"
android:layout_below="@+id/edit1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="35dp"
android:layout_marginStart="35dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="  "
android:id="@+id/btn_Read"
android:layout_alignTop="@+id/btn_Set"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="46dp"
android:layout_marginEnd="46dp"
/>
</RelativeLayout>
프로그램 에서 double 형식의 변 수 를 정의 합 니 다.읽 기 단 추 를 누 르 면 이 변수의 값 을 뒤에 추가 하고 표시 합 니 다.프로그램 을 열 고 작업 을 합 니 다.모든 것 이 정상 입 니 다.

우 리 는 설정 을 클릭 한 후에 화면 을 가로 질 러 왔 다.어,파 이 는 어디 갔 지?

사실 여기 서 우리 가 가로 세로 화면 전환 을 할 때 시스템 메커니즘 때문에 이 Activity 는 이미 소각 되 었 다.그런데 왜 이 페이지 가 존재 합 니까?이 폐 기 는 사용자 가 자발적으로 종료 하 는 것 이 아니 기 때문에 안 드 로 이 드 시스템 은 이러한 상태의 저장 기능 을 실현 합 니 다.그러나 일부 데 이 터 는 보류 되 는 요구 에 이 르 지 못 하고 보류 되 지 않 았 습 니 다.마치 프로그램 에서 불쌍 한 pai 가 버 려 진 것 과 같 습 니 다!
그러면 우 리 는 이러한 가로 세로 화면 전환 과정 에서 데 이 터 를 보존 하 는 방법 이 필요 합 니 다.여기 서 onSave InstanceState()방법 을 다시 써 야 합 니 다.

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//          Bundle 
outState.putDouble("pai",pai);
}
저장 이 해결 되 었 습 니 다.그럼 우 리 는 어떻게 꺼 냅 니까?간단 합 니 다.onCreate()방법 에서 그 인자 가 null 인지 아 닌 지 를 판단 하고 null 이 아 닌 지 를 꺼 냅 니 다.

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// pai  
if(savedInstanceState!=null)
pai=savedInstanceState.getDouble("pai");
}
지금 우 리 는 화면 이 바 뀐 후에 도 pai 가 소각 되 지 않 은 것 을 볼 수 있다.

위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 Activity 저장 과 상태 회복 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기