درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
دوره های مرتبط
دوره آموزشی ساخت ربات تلگرام
مدرس: taghandiki
این دوره را در 8 قسط خریداری کنید
ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
مدرس: مهدی عادلی
این دوره را در 2 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
مدرس: حسین احمدی
این دوره را در 17 قسط خریداری کنید
دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
مدرس: taghandiki
این دوره را در 20 قسط خریداری کنید
دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
مدرس: حسین احمدی
این دوره را در 23 قسط خریداری کنید
دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
مدرس: مهدی عادلی
این دوره را در 27 قسط خریداری کنید
دوره آموزشی طراحی رابط کاربری با JavaFX
مدرس: hharddy
این دوره را در 13 قسط خریداری کنید
دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
مدرس: dr-iman
این دوره را در 13 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
مدرس: مهدی عادلی
این دوره را در 17 قسط خریداری کنید
دوره آموزشی Exploit نویسی به زبان Perl
مدرس: dr-iman
این دوره را در 7 قسط خریداری کنید

برقراری ارتباط بین Fragment ها با activity ها و Fragment ها با هم در اندروید

0 نظرات
234 بازدیدها
سلام به ITPROهای عزیز. در مطلب قبل گفتیم که می توان Fragment ها را یک بار ساخت و چندین جا از آن استفاده کرد. حال برای این کار شما باید Fragment ها را به شکلی طراحی کنید که هر Fragment مستقل باشد و خودش layout و رفتار خودش را طراحی و تعریف کند. وقتی که شما این کار را انجام دادید شما می توانید در داخل activity این Fragment ها را قرار دهید و بتوانند با هم کار کنند و با هم ارتباط برقرار کنند و با هم بتوانند یک UI قوی بسازند و یک منطق قوی نیز پیاده سازی نمایند. نوع ارتباطی که بین دو Fragment برقرار می شود این است که وقتی اتفاقی در یک Fragment می افتد Fragment دیگر نیز تغییر کند. برای مثال شما لیست چت ها در تلگرام را به عنوان یک Fragment در نظر بگیرید و قسمتی که متن چت ها را نشان می دهد را نیز یک Fragment در نظر بگیرید. در این صورت وقتی که بر روی یک چت کلیک می کنید باید چت مورد نظر در Fragment دیگر باز شود. این ارتباط بین دو Fragment باید از طریق activity بپردازد و Fragment ها به طور مستقیم با هم ارتباط ندارند. حال در ادامه به این که چگونه این ارتباط را برقرار کنیم توضیح خواهیم داد.

تعریف اینترفیس


برای این که اجازه دهیم ک یک Fragment با Activity ارتباط برقرار کند می توانید یک اینترفیس در داخل Fragment تعریف کنید و آن را داخل activity پیاده سازی کنید. برای استفاده از آن هم Fragment وقتی ساخته می شود یعنی در متد onAttach آن اینترفیس را دریافت کرده و از داخل آن متدهای activity را فراخوانی می کند. در مثال زیر این ارتباط به شما نشان داده می شود.
public class HeadlinesFragment extends Fragment {
    OnHeadlineSelectedListener mCallback;

    // Container Activity must implement this interface
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }

    ...
}

در کد بالا یک Fragment تعریف شده است که در داخل آن یک اینترفیس به نام OnHeadlineSelectedListener
تعریف شده است که این اینترفیس یک متد به نام onArticleSelected دارد که Fragment از آن استفاده می کند.
حال در داخل یکی از متدها به شکل زیر از آن استفاده کرده ایم. این کد برای قسمت کلیک بر روی یک آیتم از لیست نوشته شده است.
@Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Send the event to the host activity
        mCallback.onArticleSelected(position);
    }


پیاده سازی اینترفیس


حال باید در داخل activity اینترفیس را داخل activity پیاده سازی کنیم. این پیاده سازی برای دریافت درخواست های Fragment ها صورت می گیرد. برای مثال در کد زیر این پیاده سازی را انجام داده ایم.
public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...

    public void onArticleSelected(int position) {
        // The user selected the headline of an article from the HeadlinesFragment
        // Do something here to display that article
    }
}


ارسال پاسخ به Fragment


از داخل یک activity که چند Fragment دارد می توان به Fragment ها دسترسی پیدا کرد و با آنها کار کرد. برای مثال همان قضیه چت های تلگرام را در نظر بگیرید. ما می خواهیم از داخل activity بگوییم که کدام چت لود شود. برای این کار باید با آن Fragment ارتباط برقرار کنیم. برای پیدا کردن Fragment مورد نظر از متد findFragmentById() استفاده می شود. و بعد از این که Fragment پیدا شد می توان به طور مستقیم متدهای public که در Fragment وجود دارند را فراخوانی نمود. برای مثال در کد زیر ما یک Fragment به نام ArticleFragment داریم که آن را پیدا کرده و از داخل آن متد updateAricleView را صدا می زنیم.
public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...

    public void onArticleSelected(int position) {
        // The user selected the headline of an article from the HeadlinesFragment
        // Do something here to display that article

        ArticleFragment articleFrag = (ArticleFragment)
                getSupportFragmentManager().findFragmentById(R.id.article_fragment);

        if (articleFrag != null) {
            // If article frag is available, we're in two-pane layout...

            // Call a method in the ArticleFragment to update its content
            articleFrag.updateArticleView(position);
        } else {
            // Otherwise, we're in the one-pane layout and must swap frags...

            // Create fragment and give it an argument for the selected article
            ArticleFragment newFragment = new ArticleFragment();
            Bundle args = new Bundle();
            args.putInt(ArticleFragment.ARG_POSITION, position);
            newFragment.setArguments(args);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack so the user can navigate back
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);

            // Commit the transaction
            transaction.commit();
        }
    }
}

در کد بالا اگر Fragment مورد نظر پیدا شود که عمل update انجام خواهد شد. ولی اگر پیدا نشد به این معنی است ک باید Fragment جاری را جمع کنیم و Fragment جدید بسازیم و در صفحه نشان دهیم. چند خط آخر نشان دهنده این است که Fragment ساخته شده را جایگزین Fragment جدید می کنیم. برای این که این قسمت را کامل درک کنید مثال تلگرام و چت های آن را به یاد بیاورید. اگر شما تلگرام را بر روی یک تبلت 10 اینچی باز کنید خواهید دید که در سمت چپ صفحه لیست چت ها است که با کلیک بر روی هر چت چت مورد نظر در سمت راست باز خواهد شد. ولی اگر تلگرام را در یک گوشی 5 اینجی باز کنید فقط لیست چت ها را می بینید که با کلیک بر روی هر چت لیست چت ها بسته شده و محتویات چت به شما نشان داده می شود. ITPRO باشید.



نویسنده: مهدی عادلی فر
منبع: Itpro
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

برچسب ها
مطالب مرتبط

در حال دریافت اطلاعات

نظرات
هیچ نظری ارسال نشده است

    برای ارسال نظر ابتدا به سایت وارد شوید

    arrow