آموزش ذخیره حالت اکتیویتی در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نوسی اندروید به آموزش ذخیره حالت اکتیویتی در برنامه نویسی اندروید می پردازیم اگر دقت کرده باشید زمانی از یک فرگمنت به فرگمنت دیگری بروید در صورتی که در فرگمنت اولی محتوایی را تغییر داده باشید مثلا در یک EditText چیزی نوشته باشید اگر بخواهید این محتویات را نگه دارید تا در صورت رفتن به فرگمنت دیگر این محتویات ذخیره شود و سپس restore شود می توانید از این آموزش استفاده کنید با ما همراه باشید.
حالت ذخیره
حالت restore
به طور مثال می خوایم یکسری داده تست را ذخیره کنیم
برای ذخیره کردن
1 2 3 4 5 6 7 8 | private int someVarA; private String someVarB; @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("someVarA", someVarA); outState.putString("someVarB", someVarB); } |
برای بازگرداندن یا همان Restore
1 2 3 4 5 6 | @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); someVarA = savedInstanceState.getInt("someVarA"); someVarB = savedInstanceState.getString("someVarB"); } |
کد کامل
از این کد در اکتیویتی نیز می توانید استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 داریم مثل زیر
1 2 3 4 5 6 7 8 9 | <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" /> |
در اکتیویتی هم کد زیر را قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 شود و در صورتی که به جای دیگه (اکتویتی دیگر) بروید و سپس بازگردید مقدار همان مقدار که وارد کرده بودید خواهد بود
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
میشه از این روش برای وقتی که مثلا فرم ثبت نام چند مرحله ای داریم استفاده بکنیم ؟
سلام
بله امکان پذیر است..
سلام من یه دکمه دارم که gone میشه ولی بعد از باز شدن دوباره برنامع هستش من باید چیکار کنم که کل اکتیویتی ذخیره بشه ؟
از بخش savedInstanceState مروبط به اکتیویتی باید با SharePerfrence استفاده کنید آموزش های زیر را دنبال کنید
http://programchi.ir/?s=sharepref
موفق و پیروز باشید.
باسلام وضمن خسته نباشید آیا می شود از این روش برای text view هم استفاده کرد واگه میشه استفاده کرد درصورت امکان میشه کدهاشو بگین با تشکر خیلی خیلی ممنون