کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

پنجره های محاوره ای در اندروید

این آموزش نحوه ی پیاده سازی و استفاده از dialog یا پنجره ی محاوره ای (که به صورت کادر شناور بر روی پنجره ی activity نمایش داده می شود) در اپلیکیشن های اندرویدی را شرح می دهد.
پروژه ی این مبحث داخل محیط کاری Android Studio نوشته شده و مبتنی بر ویرایش 5.0 سیستم عامل اندروید می باشد.

آموزش پیاده سازی dialog در اپلیکیشن به وسیله ی DialogFragments

آموزش به نمایش گذاشتن dialog در برنامه

جهت به نمایش گذاشتن یک کادر محاوره ای در Activity اپلیکیشن، بایستی نمونه ای از کلاس DialogFragment را پیاده سازی نمایید. DialogFragment در واقع یک fragment (آبجکتی که تکه ای از یک activity کل را تشکیل می دهد) است که به برنامه نویس این امکان را می دهد تا پنجره ی محاوره ای را به صورت شناور بر روی پنجره ی اصلی که activity اپلیکیشن مربوطه می باشد، به نمایش بگذارد.
به منظور به نمایش گذاشتن dialog، می توانید یا یک کلاس dialog از پیش پیاده سازی شده در fragment را باز گردانی نمایید و یا یک layout اختصاصی برای آن تعریف کنید که به هنگام اجرا برنامه فراخوانی و به نمایش گذاشته می شود.

آموزش استفاده از dialog های آماده و از قبل موجود

DialogFragment برنامه شما می تواند متد onCreateDialog را پیاده سازی نموده و dialog از پیش موجود را بازگردانی کند. کلاس Dialog، در واقع کلاس پایه یا پدر است که برای پیاده سازی dialog باید از آن ارث بری نمایید.
برنامه نویس برای نمایش دادن dialog در اپلیکیشن خود اغلب یکی از کلاس های مشتق شده از آن همچون AlertDialog، ProgressDialog، DatePickerDialog یا TimePickerDialog را مورد استفاده قرار می دهد.
اندروید همچنین یک ProgressDialog ارائه می دهد که به راحتی با فراخوانی متد ProgressDialog.open() می توان آن را باز کرده و به نمایش گذاشت.

آموزش تعریف layout اختصاصی برای DialogFragment

جهت ایجاد dialog اختصاصی خود، لازم است یک فایل layout ویژه ی آن تعریف نمایید. این فایل layout را می توان inflate نموده و با فراخوانی متد onCreateView() از fragment مربوطه بازگردانی نمود.

آموزش تعامل DialogFragmentبا activity

آبجکت DialogFragment درست مشابه دیگر fragment ها با activity مربوطه ارتباط برقرار کرده و اطلاعاتی را رد و بدل می کند. یک روش صحیح و بهینه این است که fragment یک interface معرفی کرده و activity مورد نظر این interface را پیاده سازی می کند. fragment سپس می تواند توسط activity صدا خورده شود، بدون اینکه اطلاعی از جزئیات پیاده سازی activity داشته باشد.

تمرین: پیاده سازی کلاس DialogFragment

در پروژه ی زیر نحوه ی استفاده از کلاس DialogFragment در activity را شرح خواهیم داد. این مثال هم از dialog از پیش ساخته و آماده استفاده می کند و هم برای آن یک layout اختصاصی تعریف می نماید.

آموزش ایجاد پروژه و فایل های layout

ابتدا یک پروژه ی اندروید به نام com.android.vogella.com.dialogfragmentexample ایجاد نمایید.
در فایل layout ای که activity فراخوانی می کند، دو دکمه تعریف کنید به طوری که در خصیصه (attribute) android:onClick خود به متد onClick اشاره کنند.
حال یک فایل layout به نام fragment_username.xml با بدنه ی زیر تعریف نمایید.


                
                

آموزش تعریف fragment و تنظیم activity

دو کلاس fragment زیر را ایجاد نمایید.

package dialogfragmentexample.android.vogella.com.dialogfragmentexample;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MyAlertDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                // set dialog icon
                .setIcon(android.R.drawable.stat_notify_error)
                // set Dialog Title
                .setTitle("Alert dialog fragment example")
                        // Set Dialog Message
                .setMessage("This is a message")
                // positive button
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getActivity(), "Pressed OK", Toast.LENGTH_SHORT).show();
                    }
                })
                // negative button
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getActivity(), "Cancel", Toast.LENGTH_SHORT).show();
                    }
                }).create();
    }
}
package dialogfragmentexample.android.vogella.com.dialogfragmentexample;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
public class MyDialogFragment extends DialogFragment implements TextView.OnEditorActionListener {
    private EditText mEditText;
    public interface UserNameListener {
        void onFinishUserDialog(String user);
    }
    // Empty constructor required for DialogFragment
    public MyDialogFragment() {
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_username, container);
        mEditText = (EditText) view.findViewById(R.id.username);
        // set this instance as callback for editor action
        mEditText.setOnEditorActionListener(this);
        mEditText.requestFocus();
        getDialog().getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        getDialog().setTitle("Please enter username");
        return view;
    }
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        // Return input text to activity
        UserNameListener activity = (UserNameListener) getActivity();
        activity.onFinishUserDialog(mEditText.getText().toString());
        this.dismiss();
        return true;
    }
}

کد activity خود را به صورت زیر ویرایش نمایید.

package dialogfragmentexample.android.vogella.com.dialogfragmentexample;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity implements MyDialogFragment.UserNameListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public void onFinishUserDialog(String user) {
        Toast.makeText(this, "Hello, " + user, Toast.LENGTH_SHORT).show();
    }
    public void onClick(View view) {
        // close existing dialog fragments
        FragmentManager manager = getFragmentManager();
        Fragment frag = manager.findFragmentByTag("fragment_edit_name");
        if (frag != null) {
            manager.beginTransaction().remove(frag).commit();
        }
        switch (view.getId()) {
            case R.id.showCustomFragment:
                MyDialogFragment editNameDialog = new MyDialogFragment();
                editNameDialog.show(manager, "fragment_edit_name");
                break;
            case R.id.showAlertDialogFragment:
                MyAlertDialogFragment alertDialogFragment = new MyAlertDialogFragment();
                alertDialogFragment.show(manager, "fragment_edit_name");
                break;
        }
    }
}

آموزش تست اپلیکیشن

اکنون زمانی که اپلیکیشن را اجرا نموده و بر روی دکمه ی مربوطه در UI اپلیکیشن کلیک می کنید، پنجره ی محاوره ای (dialog) حاوی پیغام مورد نظر برای شما به نمایش در می آید.

1395/12/04 4402 2811
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...