بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

دسترسی به Activity قبلی

مدیریت گفتگو
امید 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام دوستان

چطور میشه به اکتیویتی قبلی دسترسی پیدا کرد و چند تا مقدار رو ازش گرفت ؟

Edit

فرض کنید برنامتون 3 تا activity داره

اکتیویتی اول mainActivityOne

اکتیویتی دوم mainActivityTwo

اکتیویتی سوم secendActivity

حالا برنامه رو باز میکنی و از activityMainTwo وارد secendActivity میشی.

توی secendActivity از کجا میشه فهمید که از اکتیویتی اول(activityMainOne) اومده یا از اکتیویتی دوم(activityMainTwo)

نظرات

امید 10 سال پیش
کسی نیست راهنمایی کنه ؟
!M!KT 10 سال پیش
منظورت کدوم Activity هستش.
Reza 10 سال پیش
داخل هر سه اکتیویتی متد onPause رو Override کن و داخلش بنویس : G.lastActivity = this ، که البته lastActivity یه فیلد استاتیک هست در کلاس G که از Application ارث بری میکنه . ( میتونی اینو در متد onPause و در کلاس EnhancedActivity بنویسی و تمام Activity ها از اون ارث ببرن )
Reza 10 سال پیش
حالا دیگه متغییر G.lastActivity همیشه آخرین اکتیویتی رو درون خودش داره .
امید 10 سال پیش
ممنون از جوابت. این فیلد اساتیک که گفتید از چه کلاسی ساخته میشه ؟
امید 10 سال پیش
ممنون از جوابت. این فیلد اساتیک که گفتید از چه کلاسی ساخته میشه ؟ از کلاس Activity ?
امید 10 سال پیش
بدون فیلد استاتیک هم میشه همچین کاری کرد ؟
Reza 10 سال پیش
منظورتون چیه ؟ فیلد ، یک متغییر هست که اگه استاتیک تعریف بشه فقط وابسته به کلاسه و در تمام اشیاء تعریف شده از اون کلاس یه مقدار داره . بهترین روش همینه که گفتم .
امید 10 سال پیش
خوب بعد چطور از اون کلاسی که توی lastActivity دخیره شده یک مقدار رو بخونم؟ مثلا یک integer
Reza 10 سال پیش
البته میتونی در متد onPause اینو بنویسی : G.lastActivity = getClass().getSimpleName(); الان lastActivity یه متغییر از نوع String هست که نام کلاس اخیر توش ذخیره شده .
Reza 10 سال پیش
با if چک کن که G.lastActivity داخلش چیه و متناسب با اون دستور مورد نظر رو بده .
امید 10 سال پیش
ممنون Reza. فعلا با متد استاتیک نوشتم تا ببینم چی میشه ولی فکر کنم جلوتر به مشکل بخورم. قبلا یه جایی یه همچین موردی رو دیده بودم که یک متد از api اندروید استفاده کرده بود. بیشتر دنبال اون بودم. چون هم ساده تره و هم تمیزتر. اگر کسی اون متد رو سراغ داره اطلاع رسانی کنه. ممنون
امید 10 سال پیش
یه سوال دیگه هم داشتم. فرض کنید توی یک اکتیویتی چند تا کلید دارید و با کلیک رو یکیشون به اکتیویتی بعدی میرید. از کجا میشه فهمید با کلید روی کدوم کلید به اون اکتیویتی رفتید؟
Criss 10 سال پیش
کافیه همراه Intent یک مقدار رو Intent.putExtra کنید یک کلید تعریف کنید و مقدار دلخواه وارد کنید ، بعدا این کلید رو در اکتیوتی دریافت کنید < با توجه به کلید و مقدار دریافت شده میتونید نتیجه و تصمیم بگیرید

پاسخ‌ها 3

امید 10 سال پیش

خب سوالم رو جور دیگه ای مطرح میکنم

فرض کنید الان توی Secend Activity هستید.

ازکجا میشه فهمید که از کدوم اکتیویتی به Secend Activity رفتید ؟

نظرات

SaLaH KuRD 10 سال پیش

موقعی که intent رو تعریف میکنید برای رفتن به اکتیویتی بعدی، خیلی راحت میتونید از putExtra استفاده کنید در اکتیویتی اول :

Intent i = newIntent(FirstScreen.this, SecondScreen.class);
String strName = "این متن از اکتیویتی اول ارسال می شود";
i.putExtra("STRING_I_NEED", strName);

و توی اکتیویتی دوم توسط کد زیر متنی رو که از اکتیوتی اول گرفتید میگیرید و میتونید نشون بدید :

Bundle extras = getIntent().getExtras();
if(extras != null){
newString = extras.getString("STRING_I_NEED");
}

و newString داده ای هستش که شما از اکتیویتی اول گرفتید و بر اساس نیازتون میتونید ازش استفاده کنید.

---------- ویرایش شد ----------

برای ارسال داده در بین Fragment ها می تونید از روش زیر استفاده کنید :

Bundle bundle =newBundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);

و در اکتیویتی دوم داده فرستاده شده رو میگیرید :

Bundle bundle = this.getArguments();
if(bundle !=null){
int i = bundle.getInt(key, defaulValue);
}

نظرات

امید 10 سال پیش

ممنون سالار

ولی من توی کلاسی هستم که از کلاس فرگمنت extends شده و با این کد به این کلاس اومدم:

 getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, CameraFragment.newInstance(), CameraFragment.TAG).commit();

و کد شمارو توی کلاسی که از فرگمنت extends شده نمیشناسه :(

راه حل دیگه ای ندارید ؟

نظرات

k112 10 سال پیش
یک کلاس با یک متغییر استاتیک بساز ... مقدار بهش بده
امید 10 سال پیش
فعلا با فیلد استاتیک کارم رو راه انداختم ولی دنبال راه اصولیش هستم.
امید 10 سال پیش
راهی که SaLaH KuRD گفت خوب ولی برای من جواب نمیده. راه دیگه ای نیست ؟
SaLaH KuRD 10 سال پیش
جواب بالا رو ویرایش کردم مجددا بررسی کنید .
امید 10 سال پیش
قسمت اول کد حل و باید به putInt یه مقدار بدیم که جای دیگه ازش استفاده کنیم. ولی قسمت دوم رو خوب متوجه نشدم. توی getInt مگه نباید همون مقداری که توی putInt وارد کردیم رو بگیریم؟ پس چرا باید بهش مقدار بدیم ؟
Reza 10 سال پیش
بهش مقدار ندادیم ، اون کلیده ( اسم یا نشونیه ) ، یعنی مشخص میکنی که کدوم متغییر ذخیره شده رو میخوای بگیری . چون شما میتونی چندین مقدار رو در intent ذخیره کنی ، پس برای بازیابی هم باید اسمشون رو بگی .
امید 10 سال پیش
پس کجا باید بهش مقدار بدیم که از جای دیگه ای بخونیمش ؟
Reza 10 سال پیش
در putInt مقدار میدی : ==========> bundle.putInt(key, value); مقدار در value ذخیره میشه و کلید فراخوانیش key هست یا : i.putExtra("STRING_I_NEED", strName); که strName مقدار ذخیره شده است و "STRING_I_NEED" کلید فراخوانیشه .

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .