آموزش ذخیره حالت اکتیویتی در برنامه نویسی اندروید

سلام دوستان در این سری از آموزش برنامه نوسی اندروید به آموزش ذخیره حالت اکتیویتی در برنامه نویسی اندروید می پردازیم اگر دقت کرده باشید زمانی از یک فرگمنت به فرگمنت دیگری بروید در صورتی که در فرگمنت اولی محتوایی را تغییر داده باشید مثلا در یک EditText چیزی نوشته باشید اگر بخواهید این محتویات را نگه دارید تا در صورت رفتن به فرگمنت دیگر این محتویات ذخیره شود و سپس restore شود می توانید از این آموزش استفاده کنید با ما همراه باشید.
 
حالت ذخیره
 

 
حالت restore
 

 
به طور مثال می خوایم یکسری داده تست را ذخیره کنیم
برای ذخیره کردن

private int someVarA;
private String someVarB;
@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("someVarA", someVarA);
        outState.putString("someVarB", someVarB);
    }

برای بازگرداندن یا همان Restore

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        someVarA = savedInstanceState.getInt("someVarA");
        someVarB = savedInstanceState.getString("someVarB");
    }

کد کامل
از این کد  در اکتیویتی نیز می توانید استفاده کنید.

public class MainActivity extends AppCompatActivity {
    private int someVarA;
    private String someVarB;
    ...
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("someVarA", someVarA);
        outState.putString("someVarB", someVarB);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        someVarA = savedInstanceState.getInt("someVarA");
        someVarB = savedInstanceState.getString("someVarB");
    }
}

کد کامل استفاده در Fragment

public class MainFragment extends Fragment {
    private int someVarA;
    private String someVarB;
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("someVarA", someVarA);
        outState.putString("someVarB", someVarB);
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        someVarA = savedInstanceState.getInt("someVarA");
        someVarB = savedInstanceState.getString("someVarB");
    }
}

 
فرض کنید در در layout خود یک EditText داریم مثل زیر

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:saveEnabled="false"
        android:inputType="text"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:width="200dp" />

در اکتیویتی هم کد زیر را قرار دهید.

protected void onSaveInstanceState(Bundle outState) {
 super.onSaveInstanceState(outState);
 Log.i(TAG, "onSaveInstanceState");
 final EditText textBox =
 (EditText) findViewById(R.id.editText);
 CharSequence userText = textBox.getText();
 outState.putCharSequence("savedText", userText);
 }
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
   super.onRestoreInstanceState(savedInstanceState);
   Log.i(TAG, "onRestoreInstanceState");
   final EditText textBox =
        (EditText) findViewById(R.id.editText);
   CharSequence userText =
                savedInstanceState.getCharSequence("savedText");
   textBox.setText(userText);
}

در این صورت هرچیزی که وارد EditText شود و در صورتی که به جای دیگه (اکتویتی دیگر) بروید و سپس بازگردید مقدار همان مقدار که وارد کرده بودید خواهد بود
 
 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.

مطالعه بیشتر