انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#1
سلام
من یه برنامه دارم که دو اکتیویتی داره و داخل اکتیویتی دوم به سری تغییرات ظاهری با کلیک بر روی یک دکمه انجام می دم.
بعد از زدن دکمه بک و بازگشت به اکتیویتی اول دوباره که به اکتیویتی دوم میرم این اکتیویتی ریست می شه
میشه یه راهنمایی کنید چظور می شه اکتیویتی دوم رو در همون حالت سیو کرد و پس از بازگشت ریستور کرد.
ممنون
پاسخ

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#2
سلام.
هنگامی که ما بر روی دکمه Back اشاره می کنیم، اگر روش onBackPressed (کلید شماره 234) در Activity نوشته نشده باشد، عملیات پیش فرض این است که Activity فعلی، destroy (کاملا بسته) شود و اگر قبل از آن، Activity دیگری بوده، به آن برگردیم، یا اگر  نبوده، کاملا از برنامه اندروید خارج شویم. بنابراین شما اگر روش onBackPressed را ننوشته اید، با زدن دکمه Back گوشی، آن Activity دوم، destroy می شود و طبیعتا بار دوم که به آن برگردید، از نو اجرا خواهد شد.
اکنون فرض کنید قصد داریم که اطلاعات Activity را حفظ کنیم. یک راه حل، استفاده از SharedPreferences (کلید شماره 248) می باشد (این کلید را ذکر کردم چون در آن، تنظیمات را گرافیکی تغییر می دهیم، ولی برای ذخیره اطلاعات، کلیدهای دیگری نیز در این مورد وجود دارد)، که البته این ویژگی را دارد که حتی اگر از برنامه اندروید خارج شویم و دوباره برنامه اندروید را اجرا کنیم، باز هم همان آخرین اطلاعات نمایش داده می شود و هیچگاه به تنظیمات اولیه برنمی گردیم (مگر اینکه خود برنامه نویس، یک سری کد برای reset کردن تنظیمات (به صورت دستی یا خودکار) بنویسد).
اما در موارد زیادی، تنظیمات یا تغییرات مد نظرمان، با روش بالا امکان پذیر نیست و همچنین تنها برایمان مهم است که در همان یک بار اجرای برنامه اندروید، اطلاعات آن Activity حفظ شود و در دفعات بعدی اجرای برنامه اندروید، Activity از نو اجرا گردد. در این موارد، باید از همان روش onBackPressed (کلید شماره 234) استفاده کنیم (آن را در Activity دوم می نویسیم) و در آن کدی بنویسیم که کاربر به Activity اول هدایت شود. یعنی به جای destroy شدن Activity دوم (که بعد از آن، به Activity اول برمی گشتیم)، این بار با Intent به Activity اول می رویم (روش Intent را در onBackPressed می نویسیم). بنابراین در این حالت،  Activity دوم در پس زمینه است و به حالت Resume یا Stop رفته است و اگر از Activity اول دوباره به آن وارد شویم، همان اطلاعات را خواهیم داشت (از نو اجرا نمی شود).
فقط یک نکته مهم وجود دارد و آن این است که اگر از روش Intent به صورت معمولی استفاده کنیم، یک صفحه جدید از آن Activity نمایش داده می شود (یعنی در لیست Activity های موجود در پس زمینه، دو یا چند بار وجود خواهد داشت)، برای جلوگیری از این مشکل، باید روش Intent را به شکل زیر به کار ببریم (به Flag تعیین شده دقت کنید) :

کد پی‌اچ‌پی:
Intent intent = new Intent(Activity_2.thisActivity_1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent); 

این Flag باعث می شود که به جای یک اجرای جدید از Activity ، آن را از پس زمینه فراخوانی کنیم (آن اجرایی از آن که در پس زمینه است، دوباره نمایش داده می شود). بنابراین برای رفتن از Activity دوم به Activity اول ( و همچنین برعکس)، Flag بالا را فراموش نکنید (که با اجرای جدید از Activity ها مواجه نشوید).

با توجه به نکاتی که شرح داده شد، توصیه می کنم کلید زیر را بخوانید :

کلید شماره 2802

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط ehtirani

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#3
سلام
ممنون خیلی عالی.
برای ما که تازه کار هستیم و اول راه هستیم سایت شما بسیار کارگشاست.من جند ماه بود که کار برنامه نویسی اندروید رو شروع کرده بودم و به جایی هم نمی رسیدم.تا اینکه باسایت شما آشنا شدم.
از اون موقع خیلی پیشرفت کردم.
یکی از محاسن بزرگ سایت کلیدستان فروم بروزشه.
انشاالله موفق و موید باشید و پیشرفت روز به روز قرین لحظاتتان باشد.
.............................................................................نام تو کلید هر چه بستند...........................................................

 
پاسخ
 سپاس شده توسط admin

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#4
سلام مجدد
مشکل بالا حل شد ولی الان من برای خروج از اکتیویتی اول onBackPressed رو می نویسم ولی چون اکتیویتی دوم destroy نشده، برنامه بسته نمی شه.آیا کدی هست که همه اکتیویتی ها رو destroy کنه و برنامه رو کامل ببنده؟
پاسخ

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#5
بله، دو کلید زیر را بخوانید (دو حالت مختلف) :

کلید شماره 2978

کلید شماره 244

که احتمالا همان اولی مد نظرتان است (در آن، به Flag استفاده شده برای Intent دقت کنید). در کلید 2978 ، ذکر کردیم که یک بخش کد در Activity اصلی برنامه اندروید و دیگری در همان Activity فعلی (که در آن می خواهیم کامل از برنامه اندروید خارج شویم) نوشته شود، اکنون اگر Activity اول که گفتید، همان Activity اصلی برنامه اندروید است، مشکلی ندارد و هر دو را در Activity اصلی (همان Activity اول) بنویسید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#6
سلام.
این دوتا کلید هم مشکل رو حل نکرد.
من تو اکتیویتی اول و در onBackPressed این دستورات رو می نویسم:

کد پی‌اچ‌پی:
    @Override
    
public void onBackPressed() {
        
        
Intent intent = new Intent(First.this,Seccend.class);
        
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        
intent.putExtra("EXIT""true");
        
startActivity(intent);
        
finish();
       
    } 

و در onStart اکتیویتی دوم هم این دستورات رو:

کد پی‌اچ‌پی:
@Override
protected void onStart(){
super.onStart();
    
Toast.makeText(getApplicationContext(), getIntent().getStringExtra("EXIT"), Toast.LENGTH_LONG).show();
    if (
getIntent().getStringExtra("EXIT")=="true") {
              
finish();    
        }


دفعه اول که وارد اکتیویتی دوم میشیم دستور Toast عبارت False رو چاپ می کنه ولی وقتی به اکتیویتیه اول برمی گردیم و دکمه بک رو می زنیم اکتیویتیه اول بسته می شه و اکتیویتیه دوم از پشت باز میشه یعنی مقدار Exit هنوز false است و true نشده است(تا اکتیویتیه دوم هم بسته شود) و همچنین دستور Toast هم عبارت False رو چاپ می کنه.
پاسخ

سیو کردن اکتیویتی - رفتن به اکتیویتی جدید - بازگشت و ریستور اکتیویتی قبلی (اندروید)

#7
سلام.
همان طور که تذکر دادم، در آن کلید، دو بخش کد ذکر شده که هر دو را باید در Activity اول بنویسید (البته اگر Activity اصلی برنامه اندروید است).
ما قصد داریم که اگر کاربر در Activity اول، دکمه Back رو فشار داد، از برنامه خارج بشه. اما شما با کدی که نوشتید، اون رو به Activity دوم می فرستید، در صورتی که با Activity دوم دیگر کاری نداریم. پس هر دو بخش را برای Activity اول بنویسید. یعنی وقتی در Activity اول است، با اشاره بر روی دکمه Back ، با Intent به Ativity اول وارد می شود و سایر Activity ها هم بسته می شوند. چون مقدار EXIT ارسال شده، بنابراین همین یک Activity هم destroy می شود و از برنامه اندروید خارج می شویم.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان