در قسمت سی و چهارم آموزش اندروید در ادامه آموزش زیر کلاس های کلاس فرگمنت ، زیر کلاس DialogFragment را آموزش داده ایم.
نوع دیگری از فرگمنت ها که میتوان از آنها استفاده کرد فرگمنت های دیالوگی است. این گونه فرگمنت هابه صورت شناور برروی اکتیویتی نمایش داده میشود و معمولا برای پیغام هایی که برای اطمینان حاصل کردن است استفاده میشود. برای ایجاد فرگمنت های دیالوگی باید کلاس پایه DialogFragment بسط داده شود. برای درک بیشتر به مثال زیر دقت کنید
پروژه جدیدی به نام DialogFragmentPrj ایجاد کرده و کلاس جاوا جدیدی به نام Fragment1 ایجاد میکنیم و در آن چنین کدنویسی میکنیم که کدهای زیر شامل دو بخش است. بخش اول متد newInstance برای دریافت title از اکتیویتی اصلی و بخش دوم onCreateDialog برای تنظیم ویژگی های ظاهری و دکمه های پنجره دیالوگی ک نمایش داده میشود
package com.example.dialogfragmentprj; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; public class Fragment1 extends DialogFragment { static Fragment1 newInstance(String title){ Fragment1 fragment = new Fragment1(); Bundle args = new Bundle(); args.putString("title", title); fragment.setArguments(args); return fragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState){ String title = getArguments().getString("title"); return new AlertDialog.Builder(getActivity()).setIcon(R.drawable.ic_launcher) .setTitle(title) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialo, int whichbutton) { ((MainActivity)getActivity()).doPositiveClick(); } }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichbutton) { ((MainActivity)getActivity()).doNegativeClick(); } }).create(); } }
سپس در فایل MainActivity.java نیز عبارت titile و عملیات مناسب برای دو متد ()doNegativeClick و ()doPositiveClick را تنظیم میکنیم(عملیات شامل نمایش پیغام مناسب با کلاس Toast خواهد بود)
package com.example.dialogfragmentprj; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment1 dialogfragment = Fragment1.newInstance("Are you sure you want to do this??"); dialogfragment.show(getFragmentManager(), "dialog"); } public void doPositiveClick(){ //--perform steps when user click ok-- Toast.makeText(getActivity(), "You clicked Ok", Toast.LENGTH_SHORT).show(); ; } public void doNegativeClick(){ //--perform steps when user click cancel-- Toast.makeText(getActivity(), "You clicked Cancell", Toast.LENGTH_SHORT).show(); } }
سپس برنامه را اجرا کرده و نتیجه را به صورت زیر ببینید
برای ایجاد یک فرگمنت دیالوگی ابتدا یک کلاس جاوا ایجاد کرده که کلاس DialogFragment را بسط میدهد
public class Fragment1 extends DialogFragment {
متد زیر با نام ()newInstance ابتدا شئی از نوع کلاس جاری خود ایجاد کرده و شئی نیز ازنوع Bundle . مقدار title که در اکتیویتی MainActivity اراسل میشود درون شی Bunlde قرار میگیرد(args) و سپس در این کلاس به خارج فرستاده میشود و هنگام ایجاد دیالوگ از آن استفاده میشود.
static Fragment1 newInstance(String title){ Fragment1 fragment = new Fragment1(); Bundle args = new Bundle(); args.putString("title", title); fragment.setArguments(args); return fragment; }
سپس متد ()onCreateDialog را تعریف کرده ایم که بعد از متد ()onCreate و قبل از متد ()onCreateView فراخوانی میگردد
@Override public Dialog onCreateDialog(Bundle savedInstanceState){ String title = getArguments().getString("title"); return new AlertDialog.Builder(getActivity()).setIcon(R.drawable.ic_launcher) .setTitle(title) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialo, int whichbutton) { ((MainActivity)getActivity()).doPositiveClick(); } }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichbutton) { ((MainActivity)getActivity()).doNegativeClick(); } }).create(); }
حال در MainActivity به صورت زیر یک شی از نوع کلاس Fragment1 ایجاد کرده و از این طریق به متد ()newInstance جهت تعیین عبارت title برای پنجره دیالوگ دسترسی پیدا خواهیم کرد.
متد ()getFragmentManager نیز وظییفه ارتباط برقرار کردن با فرگمنت را برعهده دارد و از طریق دومتد Activity.getFragmentManager()
و Fragment.getFragmentManager() بدست می آید
Fragment1 dialogfragment = Fragment1.newInstance("Are you sure you want to do this??"); dialogfragment.show(getFragmentManager(), "dialog");
همچنین در انتها دو متد ()doPositiveClick و ()doNegativeClick برای کنترل کلیک کاربر ایجاد میکنیم
public void doPositiveClick(){ //--perform steps when user click ok-- Toast.makeText(getActivity(), "You clicked Ok", Toast.LENGTH_SHORT).show(); } public void doNegativeClick(){ //--perform steps when user click cancel-- Toast.makeText(getActivity(), "You clicked Cancel", Toast.LENGTH_SHORT).show(); }