خانه اندروید

800 ساعت آموزش اختصاصی

بیش از 30 هزار دانشجو

آموزش های پروژه محور

مطالب پیشنهادی حتما مشاهده کنید :

فیلم آموزش فرگمنت fragment اندروید استودیو

فیلم آموزش فرگمنت fragment اندروید استودیو

فیلم آموزش فرگمنت fragment اندروید استودیو

آموزش فرگمنت در اندروید

fragment فرگمنت ، قصد داریم در سری آموزش های اندروید استودیو بپردازیم به محبث فرگمنت ها همان طوری در تصاویر بالا مشاهده کنید فرگمنت خاصیت ماژالاور بودن به ما می دهد و یعنی اینکه ما می توانیم از یک تصویر چندین بار استفاده کنیم.فیلم آموزشی این قسمت هم آماده شده و شما عزیزان می توانید دانلود کنید.اما نکاتی برای فرگمنت ها هست که به اختصار خدمتون توضیح میدهیم.

پیشنهاد ویژه حتما بخوانید : فیلم آموزش خواندن اطلاعات SqlLite Select Infromation اندروید استودیو

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

هر فرگمنت ، Layout خاص ، رفتار و چرخه ی حیات خاص خود را دارد .

شما میتوانید هر fragment فرگمنت را ، روی اکتیویتی که در حال اجراست توسط تراکنش ها (FragmentTransaction و آبجکتی از نوع FragmentManager) یا Add , Remove , Replace کنید که مثالی در این مورد توی فیلم آموزشی زدیم.

شما می توانید در یک اکتیویتی چندین فرگمنت داشته باشید و برنامه ی چند UI خود را بسازید  هر فرگمنت میتواند توسط چندین اکتیویتی استفاده شود.

چرخه ی حیات فرگمنت های یک اکتیویتی رابطه ی تنگاتنگی با چرخه ی حیات آن اکتیویتی دارند یعنی با Pause شدن اکتیویتی ، تمام فرگمنت ها باید Stop شوند فرگمنت میتواند حتی بدون رابط کاربری (ui) پیاده سازی شود فرگمنت ها از Api شماره ی ۱۱ و یا ۱۳  اندروید به بعد اضافه شده اند در ادامه با ما باشید تا مثالی جامعه از فرگمنت رو خدمتون ارائه بدیم تا قابل درک باشد.

شما میتوانید با extands کردن یا به اختصار ارث بری از کلاس  fragment  یک فرگمنت اختصاصی برای خود بسازید سپس کلاس ایجاد شده را به فرگمنت معرفی کنید که توسط android:name این خاصیت امکان پذیر می باشد. و همچنین میتوانید با اضافه کردن تگ  به داخل layout ، اکتیویتی مورد نظر ، فرگمنت را به آن اضافه کنید  قبل از معرفی شدن فرگمنت ها ، محدودیت های زیادی وجود داشت چون  تنها یک فعالیت را در صفحه ی نمایش اندروید ، در یک زمان میتوانست به نمایش گذاشته شود .
مشکلی وجود داشت این بود که نمی توانستیم اکتیویتی جاری که در صفحه نمایش داده میشد را به چند قسمت تقسیم کنیم که هر کدام فعالیت خود را داشته باشد . ولی با معرفی فرگمنت ها fragment ها ، این محدودیت ها از بین رفت و برنامه های اندرویدی از انعطاف بالایی برخوردار شد .  حال ما میتوانیم یک اکتیویتی داشته باشیم ولی هر اکتیویتی شامل چندین فرگمنت باشد که هر کدام فایل layout خاص و همچنین چرخه ی حیات خاص خود را دارد .  تصویر زیر مثال ساده ای از کاربرد فرگمنت ها میباشد که نشان میدهد چگونه دو فرگمنت ترکیب شده و در یک اکتیویتی نمایش داده میشود .

فرگمنت fragment اندروید استودیو

اما چرخه زندگیfragment و متد های که میشه ازش استفاده کرد در زیر امده همراه با توضیحات کامل :

onAttach()  در این متد منبعی را برای اکتیویتی جهت کارهای پیاده سازی دریافت میکنید .
onCreate() این متد زمانی اجرا میشود که فرگمنت بوجود بیاید ، شما باید اجزای ضروری را که قرار است هنگام pause یا stop شدن حفظ شود و با resume برگردانده شود ، را در اینجا تعریف کنید .
onCreateView()  این متد زمانی اجرا میشود که فرگمنت آماده ی نمایش رابط کاربری خود هست برای اینکه بتوانید UI خاصی را برای فرگمنت خود نمایش دهید باید اجزای آن را توسط این متد برگردانید .
این متد ریشه ی اصلی UI فرگمنت شما هست و اگر فرگمنت شما بدون رابط کاربری هست میتوانید null برگردانید.
onActivityCreated()  این متد دقیقا بعد از متد onCreateView()  اجرا میشود زمانی که اکتیویتی اصلی که فرگمنت مربوط به آن هست بوجود بیاید.
فرگمنت و اکتیویتی همزمان بوجود می آیند زمانی که رابط کاربری اکتیویتی نمایش داده شود .
در این مرحله ، شما میتوانید به تمام view ها با استفاده از متد  findViewById()  دسترسی داشته باشید.
onStart() زمانی که فرگمنت نمایش داده شد این متد برای یکبار اجرا میشود .
onResume() از نامش مشخص هست زمانی که فرگمنت فعالیت خود را از سربگیرد onPause() این متد زمانی اجرا میشود که کاربر فرگمنت را ترک کند به اصطلاحی فرگمنت به حالت pause درآید . در این متد هست که شما باید تمام تغییرات را ذخیره کنید .
onStop() زمانی که فرگمنت متوقف شود این متد اجرا میشود .
onDestroyView() رابط کاربری مربوط به فرگمنت ، بعد از اجرای این متد از بین میرود.
onDestroy()  این متد برای پاکسازی کامل وضعیت فرگمنت اجرا میشود اما تضمین نمیشود که توسط پلتفرم اندروید صدا زده شود .

اما اگر بخواهیم مثالی همراه با سورس کد براتون بزنیم قبل از اینکه سورس کد را مشاهده کنید دقت کنید من سه تا اکتیویتی دارم که داخل اولین سورس کد زیر فرگمنت رو فراخوانی کرده ام و داخل یک Framelayout نوشتم تا قاب کلی برنامه ای من باشه و کاری خاصلی انجام نمیده این ویو و فقط قابی برای نمایش می باشد زیرا می خواهیم دو تا دکمه داشتیم که فرگمنت ها رو فراخوانی کنیم:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="com.rss.homeandroidir.fragment.MainActivity">
<Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="frgment1"
    android:id="@+id/btnfragment1"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_marginStart="47dp" />
   <Button
       android:layout_width="100dp"
       android:layout_height="50dp"
       android:text="frgment2"
       android:id="@+id/btnfragment2"
       android:layout_marginStart="60dp"
       android:layout_alignParentTop="true"
       android:layout_toEndOf="@+id/btnfragment1" />
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/frmlayoutview"
    android:layout_below="@+id/btnfragment2">

   <fragment
       android:id="@+id/fragment"
       android:name="com.rss.homeandroidir.fragment.fragmentclass1"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

</FrameLayout>
</RelativeLayout>

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

اکتیویتی اول و سورس کد بخش xml و کلاس fragmentclass1 :

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.rss.homeandroidir.fragment.Activityfragmentview1"
    android:background="@color/colorPrimary">
<TextView
    android:layout_width="368dp"
    android:layout_height="495dp"
    android:text="fragmentview1"
    android:gravity="center"
    android:textSize="30sp"
    tools:layout_editor_absoluteY="8dp"
    tools:layout_editor_absoluteX="8dp" />
</android.support.constraint.ConstraintLayout>

و کد جاوا یا کلاس fragmentclass1 :

package com.rss.homeandroidir.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by homeandroid.ir on 3/19/2017.
 */

public class fragmentclass1 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activityfragmentview1,container,false);
}
}

دیزاین کلی و کاری که می خواهیم انجام بدیم از اکتیویتی اول شروع شده :

design xml exmple fragment

 

پیشنهاد ویژه حتما بخوانید :فیلم آموزش ارسال پیامک sms اندروید استودیو Android Studio

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

package com.rss.homeandroidir.fragment;

import android.app.FragmentTransaction;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {
    Button btnframent1, btnframent2;
    FrameLayout frameLayout;
    FragmentManager fragmentManager=getSupportFragmentManager();



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnframent1=(Button)findViewById(R.id.btnfragment1);
        btnframent2=(Button)findViewById(R.id.btnfragment2);

        frameLayout=(FrameLayout) findViewById(R.id.frmlayoutview);


        final fragmentclass2 fclass2 = new fragmentclass2();
        btnframent1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                android.support.v4.app.FragmentTransaction ft= fragmentManager.beginTransaction();
                ft.replace( R.id.frmlayoutview,new fragmentclass1() );
                ft.commit();

            }
        });
        btnframent2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                android.support.v4.app.FragmentTransaction ft= fragmentManager.beginTransaction();
                ft.replace( R.id.frmlayoutview,new fragmentclass2() );
                ft.commit();
            }
        });

    }


}

توضیح سورس کد بالا :

تعریف فرگمنت منجیر برای مدیریت کردن فرگمنت ها و تراکنش ها :

FragmentManager fragmentManager=getSupportFragmentManager();

و هم چنین جهت اجرای تراکنش و عملیات Replace شدن نیاز هست که setonclick رو برای دکمه یک و دو بنویسیم و در دکمه یک دستور زیر که برای تراکنش و یا عملیات جابه جایی صورت می گیرد رو می نویسیم  اما دقت کنید لطفا برای جابه جایی فرگمنت ها نیاز به یک قاب داریم که در بالا اشاره کرده ایم :

btnframent1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        android.support.v4.app.FragmentTransaction ft= fragmentManager.beginTransaction();
        ft.replace( R.id.frmlayoutview,new fragmentclass1() );
        ft.commit();

    }
});

و سورس کد دکمه دوم و کلاس دوم :

btnframent2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        android.support.v4.app.FragmentTransaction ft= fragmentManager.beginTransaction();
        ft.replace( R.id.frmlayoutview,new fragmentclass2() );
        ft.commit();
    }
});

پس از کلیک کردن روی دکمه اول کلاس و ویو xml زیر فراخوانی می شود :

design xml exmple fragmentclass1

 

و سپس اگر روی دکمه دوم کلیک کنید فرگمنت دوم فراخوانی می شود.

design xml exmple fragmentclass2

 

امیدوارم آموزش امروز مورد پسندتون قرار بگیره دوستان فیلم آموزشی این قسمت هم آماده شده می توانید دانلود کنید تا توضیحات بیشتر را در قالب فیلم آموزشی ببنید.

خانه اندروید دانلود فیلم آموزشی  لطفا فیلم آموزشی رو هم ببنید برای توضیحات بیشتر :

homeandroid.ir  دانلود فیلم آموزش فرگمنت fragment اندروید استودیو

حجم فیلم آموزشی   حجم فیلم : ۶۳ مگابایت

پسورد فایل   پسورد فایل فشرده : homeandroid.ir

خانه اندروید منبع آموزش : خانه اندروید

 

درباره نویسنده

جواد محمدی هستم بنیان‌گذار سایت خانه اندروید در خدمتون هستیم با آموزش و مفاهیم برنامه نویسی اندروید-نزدیک به 10 سال هست در حوزه برنامه نویسی فعالیت می کنم. مسلط به kotlin,java,flutter,php هستم . در خانه اندروید دانستی های خودم را در اختیار تمامی علاقمندان به برنامه نویسی قرار میدم.تشکر از اینکه خانه اندرورید رو دنبال می کنید.

قبل از ارسال دیدگاه

  • قبل از ارسال دیدگاه: لطفا دیدگاه خودتون رو فقط در مورد این مطلب بنویسید.سپاسگزارم.

    دیدگاه های طولانی نادیده گرفته می شوند لذا دیدگاه خودتان را در دو خط خلاصه کنید.

    دیدگاه های که شامل توهین یا متن توهین آمیز اصلا تایید نمی شود.

    به دیدگاه های بی نام و نشان که ایمیل فیک و نام فیک وارد می کنند پاسخ داده نمی شود

12 دیدگاه

  1. امیر گفت:

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

    ولی کلاس جاوای هر فرگمنتی که به اکتیویتی موردنظر متصل شده کار نمیکنه

    یعنی فقط xml ها نمایش داده میشه و برای مثال انجام toast رو که توی یکی از کلاس ها مینویسم انجام نمیشه !!

    لطفا راهنمایی کنید

    با تشکر

    • Admin گفت:

      سلام و احترام خدمت شما دوست عزیزم امیر
      لطفا سورس کد رو قرار بدید.
      با احترام.

      • امیر گفت:

        Activity_Main.xml

        activity_fragmentview1.xml

        fragmentclass1.java

        package android.app.fragment;

        import android.os.Bundle;
        import android.support.annotation.Nullable;
        import android.support.v4.app.Fragment;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;

        public class fragmentclass1 extends Fragment {
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activity_fragmentview1, container, false);
        }
        }

        activityfragmentview1.java

        package android.app.fragment;

        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.widget.Toast;

        public class activityfragmentview1 extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragmentview1);
        Toast.makeText(activityfragmentview1.this,”Worked ! Frg1″,Toast.LENGTH_LONG).show();
        //این toast اجرا نمیشه پس معلومه کل این کلاس اجرا نمیشه
        }
        }

        • Admin گفت:

          دوست عزیزم توی کانال تلگرام خانه اندروید جواب دادم کامل خدمتون در قالب یک فیلم آموزشی
          لطفا ببنید و یاد بگیرن و چنانچه مشکل حل شد و یا حل نشد در این دیدگاه اطلاع رسانی کنید. ممنونم.
          با این عنوان در کانال خانه اندروید :
          دوست عزیزی سوال داشتن چرا نمی تونن توی فرگمنت عمل Toast رو انجام بدن
          آدرس کانال : https://t.me/homeandroid_ir
          با احترام.

  2. Ahmad گفت:

    سلام
    بسیار عالی توضیح داده اید
    انشاء الله همیشه موفق و موید باشید

  3. حسین گفت:

    با درود
    سپاس از آموزش های بی نظیر شما.
    امکانش هست که مثالی از مدیریت کلیدها بزنید، یعنی فرگمنت اول فراخونی شد و کلید برگشت زده شد، از برنامه بیرون نیاد، بیاد روی اکتیوتی اصلی برنامه و اگر روی اکتیوتی اصلی کلید برگشت زده شد از برنامه خارج بشه. (یا ترتیب فراخونی ها و برگشت ها حفظ بشه)

    • Admin گفت:

      سلام واحترام
      از لطف شما سپاسگذارم.
      دوست عزیز من فکر می کنم شما فیلم اموزشی رو مشاهده نکردید لطفا ببنید کاری که گفتید رو خودتون می تونید انجام بدید. و در آخر برای خارج شدن کافی finish(); توی رویداد کلیک دکمه بازگشت بنویسید. موفق باشید.
      با احترام.