DialogFragment с множество дейности

Използвах документацията тук, за да създам диалогов фрагмент. Кодът е:

public static MyAlertDialogFragment newInstance(int title) {
    MyAlertDialogFragment frag = new MyAlertDialogFragment();
    Bundle args = new Bundle();
    args.putInt("title", title);
    frag.setArguments(args);
    return frag;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    int title = getArguments().getInt("title");

    return new AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.alert_dialog_icon)
            .setTitle(title)
            .setPositiveButton(R.string.alert_dialog_ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doPositiveClick();
                    }
                }
            )
            .setNegativeButton(R.string.alert_dialog_cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doNegativeClick();
                    }
                }
            )
            .create();
}}

диалоговият фрагмент тук е свързан само с дейността FragmentAlertDialog. Има ли някакъв начин да го свържете с множество дейности? Имам името на дейността си за извикване в onCreateDialog, като го предавам през setArguements(). Има ли начин да го използвам? Проверих този въпрос и се надявах на потвърждение/по-добър начин.


person previouslyactualname    schedule 31.07.2013    source източник
comment
@gunar, защото това би намалило кода ми драстично..имам 10 дейности, като всички се нуждаят от диалогов фрагмент.   -  person previouslyactualname    schedule 31.07.2013


Отговори (2)


Вместо да имате FragmentAlerDialog дейност, можете да дефинирате някъде интерфейс (под някъде имам предвид или public static interface в клас DialogFragment, или отделен public interface Java файл) и всеки Activity, който желае да покаже диалоговия прозорец, може да имплементира този интерфейс.

Една често срещана практика, която използвам, е да имам root Activity за всички мои дейности по проекта. Накарайте тази основна дейност да внедри този интерфейс и след това можете да показвате това DialogFragment отвсякъде.

person gunar    schedule 31.07.2013
comment
Ще опитам това, благодаря! но не разбрах какво имате предвид под „дейности по проекта“? - person previouslyactualname; 31.07.2013
comment
Да предположим, че имате 3 дейности във вашия проект (A, B & C). Вместо да се разширяват директно от Activity/FragmentActivity, те могат да се разширяват от MyRootActivity и това може да се разширява от Activity/FragmentActivity. Накарайте MyRootActivity да внедри интерфейса, от който се нуждаете, и това трябва да е всичко. - person gunar; 31.07.2013

Просто ще публикувам какви редакции направих в кода си, всички кредити на @gunar,

създайте нов DialogImplement.java като:

package com.example.test;
public interface DialogImplement
{

    public void doPositiveClick();

}

Добавете @Override в кода на дейността преди внедряването на doPositiveClick(), например:

@Override
public void doPositiveClick() 
{
    //do what you want to do

}

уверете се, че вашата дейност прилага DialogImplement и променете кода във въпроса като:

((DialogImplement)getActivity()).doPositiveClick(); //Or negative click code

Надявам се това да помогне..Наздраве :]

person previouslyactualname    schedule 01.08.2013