ورود

View Full Version : دسترسی به یک تابع در یک اکتیویتی فعال درون یک tabHost



Ghadiri_S
چهارشنبه 03 آبان 1391, 23:08 عصر
با سلام خدمت دوستان

من با یک مشکل عجیب برخورد کردم لطفا دوستان راهنمایی بفرمایند.

من در برنامه خودم از یک tabHost استفاده کردم که خودش دارای 2 عدد TabSpec هست. این tabHost در یک اکتیویتی اصلی قرار داره به نام main و 2 تا اکتیویتی دیگه هم برای مثال به نام های A و B درست کردم که این دو تا اکتیویتی درون اکتویتی اصلی یا همون main به کمک Intent فراخوانی و به کمک setContent به TabSpec ها متصل شدند.

تا اینجا همه چیز خوب کار میکنه و من هر کدوم از TabSpec ها رو که باز میکنم اکتیویتی مربوطه رو نمایش میده و باهاش کار میکنم.

حال من یک تابع درون اکتیویتی A ایجاد کردم که به صورت public هست برای مثال اسم این تابع f هست. و میخواهم تو اکتیویتی اصلی یا همون main هر وقت که لازم بود این تابع f که درون اکتیویتی A هست رو اجرا کنم!

متاسفانه نمیدونم چطور میتونم اون تابع f را فراخوانی کنم.

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

Ghadiri_S
پنج شنبه 04 آبان 1391, 09:01 صبح
دوستان، من متوجه شدم اگه اون تابع f رو بصورت public static تعریف کنم از هر جایی تابع قابل دسترس خواهد بود. فقط این static بودن مشکل رو دوچندان میکنه، چون داخل یک تابع static نمیشه از دستوراتی مانند this یا Context استفاده کرده و از این بدتر نمیشه سایر توابعی رو که داخل همون اکتیویتی هست رو فراخونی کرد.

چه روش مناسبی وجود داره تا یک اکتیویتی رو از درون پدرش فراخوانی کرد؟

Ghadiri_S
پنج شنبه 04 آبان 1391, 10:48 صبح
دوستان ظاهرا راه حلش رو پیدا کردم.

اگر برای مثال نام اکتیوتی Test باشه ابتدا بصورت سراسری یک متغیر از نوع اکتیویتی درست میکنیم


public static Test test;


بعد داخل تابع onCreate تکه کد زیر رو مینویسم



synchronized (Test.class) {
test = this;
}


خوب حالا اگر تابع f را بخواهیم فراخوانی کنیم داخل هر اکتیویتی میشه توابع رو به صورت زیر فرا خوانی کرد.



Test.test.f();


ظاهرا همه چیز خوبه فقط دوستان و اساتید خواهش میکنم درباره synchronized توضیح بدید میخوام بدونم دقیقا این دستور چیکار میکنه

با تشکر

Ghadiri_S
پنج شنبه 04 آبان 1391, 10:49 صبح
...............

dr_jacky_2005
شنبه 06 آبان 1391, 11:51 صبح
لازم به سینک نیست.فقط کافیه Context رو به تابع f پاس بدی.

Ghadiri_S
یک شنبه 07 آبان 1391, 09:12 صبح
دوست عزیز اون مشکل حل شد فقط میخوام بدونم synchronized چیکار میکنه؟