نحوه ی ذخیره ی مقادیر قبل از چرخش صفحه
سلام دوستان برنامه نویس
یه برنامه نوشتم که اطلاعات یکی از کلاس هام رو به طور موقت در یک ArrayList ذخیره می کنم و نتیجه کار رو در یک ListView نشون می دم. خوب اینکار در Layout Portraite درسته اما همینکه Layout رو به Landscape تغییر میدم در واقع با فراخوانی متد onCreate همه اطلاعات می پره .
چیکار کنم که اطلاعات رو بتونم در حالت LandScape هم داشته باشم؟
فقط همین قدر می دونم که بایستی آرگومان saveInstantState رو در متد onCreate چک کنم و در صورتیکه خالی نباشه یه عملیاتی مبنی بر نمایش اطلاعات Save شده در ArrayList در حالت LandScape انجام بدم.
حالا نمیدونم اون عملیات چیه؟
ممنون میشم راهنمایی بفرمایید.
باتشکر
یه بار دیگــــــــــــــــــــــــــه ! ، بفرمائید:)
اول باید در کنار oncreate متد onsaveinstancechanged رو override کرد
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt(key, value);
}
مقدار ها رو مثل یه اینتنت put کرد ، حالا قبل چرخش صفحه اول مقدار ها ذخیره میشن ، واسه بازیابی شون :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.creator);
if (savedInstanceState != null && savedInstanceState.containsKey(value))
{
int var = savedInstanceState.getInt(key)
}
}
چک میشه آیا کلید وجود داره یا نه و بعد ، دوباره متغییر رو با get کردنش کلید مقدار دهی میکنیم
ضمنا بهتر اسم سوال رو به "نحوه ی ذخیره ی مقادیر قبل از چرخش صفحه تغییر بدید ، تا همه بتونن استفاده کنن !
موفق باشید
سلام به دوستان محترم
بالاخره با راهنمایی های دوستان و با پیگیری خودم به اون چیزی که مد نظرم بود رسیدم.
سناریو از این قرار بود که من یک کلاس داشتم به نام FastFood که اون رو در یک ArrayList ذخیره می کردم و یک کنترل autoCompleteTextView برای ذخیره آدرس داشتم که اون رو هم در یک ArrayList ذخیره می کردم و می خواستم وقتی Layout عوض میشه مقادیر رو داشته باشم.
public class Main extends TabActivity {
List lst = new ArrayList();
List strList = new ArrayList();
ListView lv;
AutoCompleteTextView editAddress;
@Override
protected void onSaveInstanceState(Bundle state) {
// TODO Auto-generated method stub
super.onSaveInstanceState(state);
state.putSerializable("myListArray", (Serializable) lst);
state.putStringArrayList("myStrArray", (ArrayList) strList);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.listview1);
editAddress = (AutoCompleteTextView) findViewById(R.id.editAddress);
if ((savedInstanceState != null) && (savedInstanceState.getSerializable("myListArray") != null)){
lst = (List<com.example.fastfoodapp_v1.FastFood>) savedInstanceState.getSerializable("myListArray");
strList = savedInstanceState.getStringArrayList("myStrArray");
lv.setAdapter(new MyAdapter(Main.this,android.R.layout.simple_list_item_1,lst));
editAddress.setAdapter(new ArrayAdapter(Main.this, android.R.layout.simple_list_item_1, strList));
}
باتشکر
با عرض سلام خدمت دوستان
میشه اول یکی از دوستان یک توضیح کوچولو بده که وقتی صفحه نمایش را می چرخونیم چه اتفاقی می افته که اطلاعات کاملا reset میشه؟
دوماٌ : علاوه بر راه فوق آیا راه ساده تری نیست که با چرخش صفحه اطلاعات نگه داری بشه ؟
چون مثلا طبق روش بالا در بازی hangman اگر بخواهیم با چرخش صفحه اطلاعات حفظ بشه بایدتمامی کنترل ها و ارایه ها اطلاعاتشون در جایی ذخیره بشه و بعد دوباره بارگزاری بشه.
سوماٌ : پس چرا در listview که من طبق آموزش قسمت 10 ساختم بعد از edit اطلاعات یک listview و بعد چرخش صفحه اطلاعات ریست نمیشه ؟
با تشکر
با توجه بیشتر به آموش ها و کمی کنجکاوی در استفاده از چرخه ی حیاط اکتیویتی ها میشه متوجه ی این موضوع شد که علت چیه که همه ی متغییر ها مقدار شون رو از دست میدن ، برداشت من این بود که اکتیویتی یک بار متوقف میشه و دوباره با طول و عرض جدید ساخته میشه ، حالا توی همون بازی دوز ، یا هنگ من ، یا هر برنامه ی دیگه ای ، کافیه متغییر ها رو به اکتیویتی جدید بفرستیم که این کار با یک متغییر کمکی از نوع boundle که در هر بار oncreate ایجاد میشه ، انجام میشه ، مثلا کافیه یک آرایه رو کامل بریزیم تو یه آرایه ی دیگه و بفرستیم به اکتیویتی چرخیده شده !!! ،
پس چرا در listview که من طبق آموزش قسمت 10 ساختم بعد از edit اطلاعات یک listview و بعد چرخش صفحه اطلاعات ریست نمیشه ؟
حتی من آرایه notes را که در کلاس G قرار دادیم را دوباره در ActivityMain قرار دادم اما بازم بعد از edit اطلاعات یک listview و بعد چرخش صفحه اطلاعات ریست نمیشه ،اما طبق گفته شما چون اکتیویتی بسته میشه و دوباره در حالت چرخش ایجاد میشه باید اطلاعات ریست بشه.
ممنون میشم راهنمایی کنید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .