استفاده از کلاسهای non-static در static
دوستان ایا راهی وجود داره که بشه این کار رو کرد؟ منظورم عنوان سواله. مثلا استفاده از tostring در کلاس استاتیک. یا پیشنهاد جایگزینی دارید؟
tostring که مثال زدید یه عضو کلاسه که در صورت وهله سازی کلاس معنا پیدا میکنه. اگه در مورد یه کلاس استاتیک به این مورد برخوردید با اصلاح معماری نرم افزارتون باید مشکل رو حل کنید. نمیتونید توقع داشته باشید یه کلاس استاتیک رفتارهای یک کلاس غیر استاتیک رو براتون فراهم کنه. کدی که باعث نیازتون به همچین چیزی شده رو به اشتراک بذارید تا دوستان بتونن راهنمایی کنن. البته عنوان سوال شدنیه ولی مثالی که زدید خیر
ببینید دوستان کدی که قرار دادم . کد خروج از app هست. (شبیه سازی خروج). در واقع این قطعه کد یک متد استاتیک از یک کلاسه که قراره بصورت استاتیک فراخوانی بشه. جریان از این قراره که بجای چک کردن اتصال به اینترنت در هر اکتیویتی کدی نوشته شده. که هنگام رفتن از یک اکتیویتی به اکتیویتی دیگر مقدار broadcast چک میشه (بررسی آنی اتصال به اینترنت). و متغیر ما مقدار دهی میشه که مورد بحث نیست. پس از بررسی در صورت قطع بودن اتصال باید یک دیالوگ باز بشه که دو button داره یکی تلاش مجدد و دیگری خروج. حالا کد خروج اینه که بصورت متد استاتیک نوشته شده. من باید در هر اکتیویتی بعد از شرط قطعی اینترنت این رو فراخوانی کنم ولی ارور میده که تصویرشو قرار دادم.
اما سوال دیگه ای هم داشتم و اینه که زمانی که تلاش مجدد تاچ شد در هر اکتیویتی باید کار متفاوتی انجام بشه. حالا به چه صورت میشه که متد مربوطه(منظورم همون کار متفاوت در هر اکتیویتی) رو به کلاسی که دیالوگ توی اون نوشته شده ارسال کنم؟ توجه داشته باشین که کد زیر هم متدی از این کلاسی هست که دیالوگ توی اون نوشته شده.
private void static exitApplication() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}

من سوالتون رو ندیده بودم که زودتر پاسخ بدم ، شرمنده !
خوب دوست عزیز ، برای حل مشکلتون باید اول مفهوم Static - non static رو کامل تر متوجه بشید
وقتی متدی non static باشه ، یعنی بدون ساختن نمونه کلاس به این شکل
Car myCar = new Car();
نمی تونید ازش استفاده کنید ، اما در static یعنی شما میتونید از همون کلاس اصلی تون یه متدی را فراخوانی کنید !
باتوجه به این که ، معلوم نیست این متد کجا داره اجرا میشه ، واضح هست که Context اش هم مشخص نیست (تقریبا یعنی اینکه از کدوم اکتیویتی داره اجرا میشه ) پس کافیه ما توی کلاس Static شما ، بگیم که Context فلان اکتیویتی هست ، پس تابع شما نیاز به یه ورودی ، به عنوان بستری که متد های non static در اون اجرا بشن داره
public static void ExitApp(Context context) {
Intent intent = new Intent();
context.startActivity(intent);
}
موفق باشید
این intent باید توسط کی اجرا بشه؟ مثلا میتونه توسط یه CURRENT ACTIVITY نامی اجرا بشه که تو آموزش ها نحوه همیشه داشتنش رو توضیح دادن. اینجا CURRENT ACTIVITY همون وهله ایه (Instance) که وظیفه اجرای متد رو به عهده داره و کلاس استاتیک شما صرفا میتونه باعث کوتاه تر شدن کد بشه
الان میشه ازش بصورت استاتیک استفاده کرد (البته با کلاس G که آشنای تمام دوستان هستش) :
public void static exitApplication() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);
}
خب میشه یه متغیر به عنوان ورودی به اون متدی یا کلاسی که داری بفرستید (مثلا بصورت عدد) ، حالا با switch با توجه به اون ورودی کارهای مختلف رو میتونید انجام بدید.
public void showMyDialog(int id) {
// use switch for doing multiple actions
}
showMyDialog(1);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .