فیلم آموزش فرگمنت 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 و متد های که میشه ازش استفاده کرد در زیر امده همراه با توضیحات کامل :
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); } }
دیزاین کلی و کاری که می خواهیم انجام بدیم از اکتیویتی اول شروع شده :
پیشنهاد ویژه حتما بخوانید :فیلم آموزش ارسال پیامک 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 زیر فراخوانی می شود :
و سپس اگر روی دکمه دوم کلیک کنید فرگمنت دوم فراخوانی می شود.
امیدوارم آموزش امروز مورد پسندتون قرار بگیره دوستان فیلم آموزشی این قسمت هم آماده شده می توانید دانلود کنید تا توضیحات بیشتر را در قالب فیلم آموزشی ببنید.
لطفا فیلم آموزشی رو هم ببنید برای توضیحات بیشتر :
دانلود فیلم آموزش فرگمنت fragment اندروید استودیو
حجم فیلم : ۶۳ مگابایت
پسورد فایل فشرده : homeandroid.ir
منبع آموزش : خانه اندروید
با سلام این فیلم رو دیدم و عمل کردم ولی یک مشکل برام پیش اومده
فرگمنت ها درست کارمیکنه مانند فیلم
ولی کلاس جاوای هر فرگمنتی که به اکتیویتی موردنظر متصل شده کار نمیکنه
یعنی فقط xml ها نمایش داده میشه و برای مثال انجام toast رو که توی یکی از کلاس ها مینویسم انجام نمیشه !!
لطفا راهنمایی کنید
با تشکر
سلام و احترام خدمت شما دوست عزیزم امیر
لطفا سورس کد رو قرار بدید.
با احترام.
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 اجرا نمیشه پس معلومه کل این کلاس اجرا نمیشه
}
}
دوست عزیزم توی کانال تلگرام خانه اندروید جواب دادم کامل خدمتون در قالب یک فیلم آموزشی
لطفا ببنید و یاد بگیرن و چنانچه مشکل حل شد و یا حل نشد در این دیدگاه اطلاع رسانی کنید. ممنونم.
با این عنوان در کانال خانه اندروید :
دوست عزیزی سوال داشتن چرا نمی تونن توی فرگمنت عمل Toast رو انجام بدن
آدرس کانال : https://t.me/homeandroid_ir
با احترام.
خیلی ممنون
فیلم بسیار کاربردی بود و مشکلم رو حل کرد
با تشکر
خواهش می کنم موفق باشی دوستم.
سلام
بسیار عالی توضیح داده اید
انشاء الله همیشه موفق و موید باشید
سلام و درود خدمت شما
از لطفا شما سپاسگزارم.
با احترام.
با درود
سپاس از آموزش های بی نظیر شما.
امکانش هست که مثالی از مدیریت کلیدها بزنید، یعنی فرگمنت اول فراخونی شد و کلید برگشت زده شد، از برنامه بیرون نیاد، بیاد روی اکتیوتی اصلی برنامه و اگر روی اکتیوتی اصلی کلید برگشت زده شد از برنامه خارج بشه. (یا ترتیب فراخونی ها و برگشت ها حفظ بشه)
سلام واحترام
از لطف شما سپاسگذارم.
دوست عزیز من فکر می کنم شما فیلم اموزشی رو مشاهده نکردید لطفا ببنید کاری که گفتید رو خودتون می تونید انجام بدید. و در آخر برای خارج شدن کافی finish(); توی رویداد کلیک دکمه بازگشت بنویسید. موفق باشید.
با احترام.
نه دوست عزیز!!
شما سوال بنده ارو متوجه نشدید، فیلم رو هم دیدم جوابم توش نبود.
من جواب سوال خودمو از وبسایت دیگه گرفتم.
تشکر.
سلام خواهش می کنم.
به هر حال به جواب رسیدید.
موفق باشید.