Android:如何防止轮播后保存数据

时间:2018-01-06 13:42:14

标签: android rotation

我希望在旋转屏幕时阻止创建音符对象。 我知道在轮换后会创建一个新活动,框架会在销毁该活动之前保存所有可编辑的小部件数据。

我有一个取消按钮,当我不旋转屏幕时工作正常。 当我旋转屏幕时,外部其他激活。

   @Override
protected void onPause() {
    super.onPause();
    if (mIsCancelling) {
        if (mIsNewNote) {
            Log.d(TRACE_TAG, "onPause() : mIsCancelling == true && mIsNewNote == true => DataManager.removeNote(position:" + mNotePosition + ")");
            DataManager.getInstance().removeNote(mNotePosition);
        }
        else {
            Log.d(TRACE_TAG, "onPause() : mIsCancelling == true && mIsNewNote == false => storePreviousNoteValues()");
            storePreviousNoteValues();
        }
    } else {
        Log.d(TRACE_TAG, "onPause() : mIsCancelling == false => saveNote()");
        saveNote();
    }
}

   @Override
protected void onSaveInstanceState(Bundle outState) {
    Log.d(TRACE_TAG, "onSaveInstanceState(outState)");
    super.onSaveInstanceState(outState);
    outState.putString(ORIGINAL_NOTE_COURSE_ID, mOriginalNoteCourseId);
    outState.putString(ORIGINAL_NOTE_TITLE, mOriginalNoteTitle);
    outState.putString(ORIGINAL_NOTE_TEXT, mOriginalNoteText);
}

private void restoreOriginalNoteValues(Bundle savedInstanceState) {
    Log.d(TRACE_TAG, "restoreOriginalNoteValues(savedInstanceState)");
    mOriginalNoteCourseId = savedInstanceState.getString(ORIGINAL_NOTE_COURSE_ID);
    mOriginalNoteTitle = savedInstanceState.getString(ORIGINAL_NOTE_TITLE);
    mOriginalNoteText = savedInstanceState.getString(ORIGINAL_NOTE_TEXT);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_note);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mSpinnerCourses = (Spinner) findViewById(R.id.spinner_courses);

    List<CourseInfo> courses = DataManager.getInstance().getCourses();
    ArrayAdapter<CourseInfo> adapterCourses =
            new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, courses);
    adapterCourses.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mSpinnerCourses.setAdapter(adapterCourses);

    Log.d(TRACE_TAG, "OnCreate(savedInstanceState) => readDisplayStateValues()");
    readDisplayStateValues();
    if (savedInstanceState == null) {
        Log.d(TRACE_TAG, "OnCreate(savedInstanceState) : savedInstanceState == null => saveOriginalNoteValues()");
        saveOriginalNoteValues();
    }
    else {
        Log.d(TRACE_TAG, "OnCreate(savedInstanceState) : savedInstanceState != null => restoreOriginalNoteValues(savedInstanceState)");
        restoreOriginalNoteValues(savedInstanceState);
    }

    mTextNoteTitle = (EditText) findViewById(R.id.text_note_title);
    mTextNoteText = (EditText) findViewById(R.id.text_note_text);

    if (!mIsNewNote) {
        Log.d(TRACE_TAG, "OnCreate(savedInstanceState) : mIsNewNote == false => displayNote(...)");
        displayNote(mSpinnerCourses, mTextNoteTitle, mTextNoteText);
    }
}

1 个答案:

答案 0 :(得分:0)

在Manifest文件的Activity标记中,您应该提及

<activity
    android:name="com.example.MainActivity"
    android:label="@string/app_name" 
    android:configChanges="keyboardHidden|orientation">

如果您使用的是Android 2.3(API级别13)及以上,请使用

<activity
    android:name="com.example.Activity"
    android:label="@string/app_name" 
    android:configChanges="keyboardHidden|orientation|screenSize">

或者您可以覆盖此方法

 @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {

 // TODO Auto-generated method stub
 super.onRestoreInstanceState(savedInstanceState);
}