آموزش DialogFragment در اندروید
سلام دوستان عزیز در این سری از آموزش برنامه نویسی اندروید به آموزش DialogFragment در اندروید می پردازیم در واقع اگر بخواهیم یک اکتیویتی را در یک Dialog نمایش دهیم می توانیم از DialogFragment استفاده کنیم به این شکل که آن اکتیوینی را به فرگمنت (Fragment) تبدیل کرده سپس در Dialog نمایش میدهیم در ادامه چند مثال مختلف برای ایجاد DialogFragment برای شما قرار میدهیم.
از این آموزش به منظور نمایش Dialog , AlertDialog یا برای نمایش اطلاعات به کاربران استفاده می شود در ادامه با ما همراه باشید تا نحوه پیاده سازی آن را یاد گیرید.
در ابتدای کار باید در مسیر res/layout یک لایه به نام fragment_edit_name.xml ایجاد کنید این بخش ظاهر اصلی بخش Dialog ما خواهد بود در واقع این layout درون دیالوگ نمایش داده خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/edit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" > <TextView android:id="@+id/lbl_your_name" android:text="Your name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/txt_your_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:imeOptions="actionDone" /> </LinearLayout> |
در بالا یک EditText به منظور دریافت ورودی و یک TextView برای نمایش اطلاعات قرارگرفته است.
یک کلاس به نام EditNameDialogFragment ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import android.support.v4.app.DialogFragment; // ... public class EditNameDialogFragment extends DialogFragment { private EditText mEditText; public EditNameDialogFragment() { } public static EditNameDialogFragment newInstance(String title) { EditNameDialogFragment frag = new EditNameDialogFragment(); Bundle args = new Bundle(); args.putString("title", title); frag.setArguments(args); return frag; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_edit_name, container); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mEditText = (EditText) view.findViewById(R.id.txt_your_name); String title = getArguments().getString("title", "Enter Name"); getDialog().setTitle(title); mEditText.requestFocus(); getDialog().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } } |
در بالا ما آمدیم کلاس رو از DialogFragment گسترش دادیم با این گار باید از یکسری متد به نام های EditNameDialogFragment , onViewCreated , onCreateView استفاده کنیم در اینجا در بخش onViewCreated شئی ها موجود در layout را find کردیم در بخش onCreateView لایه را inflate کردیم تا به شئی های آن دسترسی داشته باشیم و در بخش EditNameDialogFragment داده ای که کاربر در EditText وارد می کند را می توانیم دریافت کنیم
کلاس بالا یک کلاس کمکی بوده حال باید از آن استفاده کنیم.
و در نهایت با استفاده از کد زیر می توانیم آن را در Activity نمایش دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class DialogDemoActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); showEditDialog(); } private void showEditDialog() { FragmentManager fm = getSupportFragmentManager(); EditNameDialogFragment editNameDialogFragment = EditNameDialogFragment.newInstance("Some Title"); editNameDialogFragment.show(fm, "fragment_edit_name"); } } |
تا اینجا ما اومدیم یک Dialog فرگمنت ساده ایجاد کردیم در ادامه نحوه ایجاد AlertDialog سفارشی همراه با DialogFragment را به شما نمایش میدهیم.
یک کلاس به نام MyAlertDialogFragment ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | class MyAlertDialogFragment extends DialogFragment { public MyAlertDialogFragment() { // Empty constructor required for DialogFragment } public static MyAlertDialogFragment newInstance(String title) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putString("title", title); frag.setArguments(args); return frag; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { String title = getArguments().getString("title"); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); alertDialogBuilder.setTitle(title); alertDialogBuilder.setMessage("Are you sure?"); alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // on success } }); alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } } }); return alertDialogBuilder.create(); } } |
این کلاس هم همانند کلاس قبلی به شکل کمکی ایجاد شده است و تفاوت آنچنانی نمی کند فقط اینکه در بخش onCreateDialog ما یک Dialog یا AlertDialog ایجاد کردیم که صدا زدن متد آن قابل نمایش خواهد بود.
برای اینکه در اکتیویتی آن را نمایش دهید می توانید از کد زیر استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 | ublic class DialogDemoActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); showAlertDialog(); } private void showAlertDialog() { FragmentManager fm = getSupportFragmentManager(); MyAlertDialogFragment alertDialog = MyAlertDialogFragment.newInstance("Some title"); alertDialog.show(fm, "fragment_alert"); } } |
در اینجا دید که به چه سادگی آمادیم از DialogFragment استفاده کردیم امکان سفارشی سازی بخش های مختلف AlertDialog وجود دارد همینطور که ما در اینجا یک مقدار را به EditText ارسال می کنیم.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
کاش عکس هم میذاشتید واسه اموزشتون
اونطوری بهتر متوجه میشیم
احسنت منم با شما موافقم
بله من هم با شما که با اوشون موافقید موافقم