نمایش نتایج 1 تا 4 از 4

نام تاپیک: فراخوانی یک متد موجود داخل کلاس فرگمنت از کلاس خارجی

  1. #1
    کاربر دائمی آواتار samiasoft
    تاریخ عضویت
    مهر 1391
    محل زندگی
    اردبیل
    پست
    1,242

    فراخوانی یک متد موجود داخل کلاس فرگمنت از کلاس خارجی

    سلام دوستان

    فرض کنید یک کلاس فرگمنت بدین صورت داریم :

    public class profile_Fragment extends Fragment {

    Button btn_load;
    ImageView image_1;

    public profile_Fragment() {

    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_profile, container, false);
    init(view);
    return view;
    }

    private void init(View view)
    {

    btn_load = view.findViewById(R.id.btn_load);
    image_1 = view.findViewById(R.id.image_1);

    btn_load.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    Downloader downloader = new Downloader();
    downloader.start();

    }
    });

    }

    public void check(){

    }


    }

    و یک کلاس خارجی بدین صورت :
    public class Downloader (){







    public void start(){







    }




    }


    حال سوالی که داشتم این هستش که داخل تابع start چگونه تابع check را فراخوانی کنیم؟

  2. #2

    نقل قول: فراخوانی یک متد موجود داخل کلاس فرگمنت از کلاس خارجی

    نقل قول نوشته شده توسط samiasoft مشاهده تاپیک
    سلام دوستان

    فرض کنید یک کلاس فرگمنت بدین صورت داریم :

    public class profile_Fragment extends Fragment {

    Button btn_load;
    ImageView image_1;

    public profile_Fragment() {

    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_profile, container, false);
    init(view);
    return view;
    }

    private void init(View view)
    {

    btn_load = view.findViewById(R.id.btn_load);
    image_1 = view.findViewById(R.id.image_1);

    btn_load.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    Downloader downloader = new Downloader();
    downloader.start();

    }
    });

    }

    public void check(){

    }


    }

    و یک کلاس خارجی بدین صورت :
    public class Downloader (){







    public void start(){







    }




    }


    حال سوالی که داشتم این هستش که داخل تابع start چگونه تابع check را فراخوانی کنیم؟
    روش الصاق فرگمنت به اکتیویتی اگر به صورت زیر هست.

    profile_Fragment fragment = new profile_Fragment ();
    fragment.setArguments(arguments);
    getSupportFragmentManager().beginTransaction()
    .add(R.id.item_detail_container, fragment)
    .commit();

    خوب تو اکتیویتی به راحتی به آبجکت فرگمنت که دسترسی دارید(()profile_Fragment fragment = new profile_Fragment) و صد البته به متدهای فر گمنت خودتون...

    حالا اگر در زمان اجرا فرگمنت ها را اضافه میکنید یعنی با استفاده از کلاس FragmentPagerAdapter یعنی یک کلاس wrapper دارید که توی اون تعریف میکنید که فرگمنت ها فعال بشن خوب یکم سخت می تونید به فرگمنتی که می خواهید دسترسی داشته باشید چون این کلاس مسول ساختن شی و اضافه کردن فرگمنت به اکتیویتی هست برای همین بهترین کار اینه هست که یک اینترفیس در فرگمنت تعریف کنید و تو اکتیویتی ویا هر کلاسی که می خواهید پیاده سازی کنید مثلا

    public class profile_Fragment extends Fragment implements MyVirtualMethods{

    Button btn_load;
    ImageView image_1;

    public profile_Fragment() {

    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_profile, container, false);
    init(view);
    return view;
    }

    private void init(View view)
    {

    btn_load = view.findViewById(R.id.btn_load);
    image_1 = view.findViewById(R.id.image_1);

    btn_load.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    Downloader downloader = Downloader.newInstance((MyVirtualMethods) profile_Fragment.this);
    downloader.start();

    }
    });

    }


    @Override
    public void check(){
    //write this code herer!
    }

    public interface MyVirtualMethods{
    void check();
    }

    }

    public static class Downloader {

    private MyVirtualMethods mMethods;

    private Downloader (MyVirtualMethods methods){
    this.mMethods = methods;
    }

    public static Downloader newInstance(MyVirtualMethods methods){
    return new Downloader(methods);
    }

    public void start(){
    //call back to virtual method.
    mMethods.check();
    }


    }

    البته می تونید با کلاس abstract هم پیاده سازی کنید.
    یک نکته ! این تغییرات که گذاشتم تست نکردم چون تو یک تکست ادیتور نوشتم نتونستم تو اندروید تست کنم!
    آخرین ویرایش به وسیله farhad_shiri_ex : چهارشنبه 17 مرداد 1397 در 12:05 عصر

  3. #3
    کاربر دائمی آواتار samiasoft
    تاریخ عضویت
    مهر 1391
    محل زندگی
    اردبیل
    پست
    1,242

    نقل قول: فراخوانی یک متد موجود داخل کلاس فرگمنت از کلاس خارجی

    ممنون از توجهتون ..متاسفانه با خطا روبرو شدم نمیدونم اینو چطوری حل کنم :


    لطف میکنید در مورد پیاده سازی با کلاس abstract هم یک نمونه مثال بزنید

  4. #4

    نقل قول: فراخوانی یک متد موجود داخل کلاس فرگمنت از کلاس خارجی

    نقل قول نوشته شده توسط samiasoft مشاهده تاپیک
    ممنون از توجهتون ..متاسفانه با خطا روبرو شدم نمیدونم اینو چطوری حل کنم :


    لطف میکنید در مورد پیاده سازی با کلاس abstract هم یک نمونه مثال بزنید
    بله ! شرمنده ایراد از سورس کد هست!
    تعریف اینترفیس MyVirtualMethods را که در کلاس داخلی تعریف شده در یک فایل دیگر تعریف کنید!

تاپیک های مشابه

  1. مبتدی: فراخوانی یک متد عمومی در یک کلاس
    نوشته شده توسط azita90 در بخش C#‎‎
    پاسخ: 2
    آخرین پست: پنج شنبه 01 خرداد 1393, 18:54 عصر
  2. فراخوانی یک متد از داخل یک برنامه درحال اجرا
    نوشته شده توسط m * h * d در بخش C#‎‎
    پاسخ: 3
    آخرین پست: پنج شنبه 18 آذر 1389, 13:20 عصر
  3. سوال: فراخواني يك متد از windows serivce توسط windows application
    نوشته شده توسط shaki_phd در بخش C#‎‎
    پاسخ: 4
    آخرین پست: یک شنبه 24 خرداد 1388, 12:57 عصر
  4. مشکل در فراخوانی یک متد از فرم دوم
    نوشته شده توسط baby_tanhaa در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: چهارشنبه 22 اسفند 1386, 09:52 صبح
  5. نحوی فراخوانی یک متد تعریف شده در CodeBehind
    نوشته شده توسط amirfahmideh در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: یک شنبه 08 مهر 1386, 19:33 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •