2015-07-02 3 views
0

Приложение должно показывать один и тот же диалог из разных мест приложения.Сокращение повторения кода для отображения диалогов Android?

Как создать функцию, которая помогает создавать СУХОЙ код.

Пример Открывание Dialog:

LocationDialogFragment lf = new LocationDialogFragment(); 
       Bundle bundle = new Bundle(); 
       bundle.putString(Constants.CURRENT_NAME, name); 
       bundle.putLong(Constants.CURRENT_ID, id); 
       lf.setArguments(bundle); 
       lf.show(getFragmentManager(), "TAG"); 

Это делается во многих видах деятельности и фрагментов в моем приложении. Как я могу это предотвратить?

+0

a Помощник? – Blackbelt

ответ

1

Самое простое решение - создать класс DialogHelper со статическим методом, который вы можете вызвать из любого места.

Pass это параметры, которые связаны с контекстом, как fragmentManager, как это:

public class DialogHelper{ 

    public static LocationDialogFragment createAndShowLocationDialogFragment(long id, String name, FragmentManager fragmentManager, Bundle bundle){ 

     LocationDialogFragment lf = new LocationDialogFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putString(Constants.CURRENT_NAME, name); 
     bundle.putLong(Constants.CURRENT_ID, id); 
     lf.setArguments(bundle); 
     lf.show(fragmentManager, "TAG"); 

     return lf; 
    } 

} 

Таким образом, вы можете назвать его оттуда, где вы хотели бы, где у вас есть доступ к FragmentManager:

LocationDialogFragment currentDialog = DialogHelper.createAndShowLocationDialogFragment(5, "DialogName", getFragmentManager(), bundle); 

Если вы не хотите, чтобы показать диалоговое окно мгновенно, просто создать его, вы можете удалить метод show от статического метода, и, таким образом вам не нужно передать параметр FragmentManager.

0

расширить диалог, переопределение и установить все в шоу-методе, например

0

Создать вспомогательный класс, где вы можете поместить статические методы и сделать так:

//In the Helper class 
public static void createLocationDialog(FragmentActivity fa, String name, String id,String tag, Bundle args){ 
    LocationDialogFragment lf = new LocationDialogFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putString(Constants.CURRENT_NAME, name); 
    bundle.putLong(Constants.CURRENT_ID, id); 
    lf.setArguments(args); 
    lf.show(fa.getFragmentManager(), tag); 
} 

// in the fragments: 
createLocationDialog(getActivity(), thename, theid, thetag, theargs) 
+0

Я почти опубликовал то же самое :) Но если вы вернете сам диалог, вы можете изменить аргументы и позже дать ссылку на него для любых возможных изменений. – abbath

+0

Правильно. но я не хотел сильно менять его код, чтобы он мог легко найти свой путь. Должен ли я его редактировать? – Jibbo

+0

Вы правы, он решит, какой из них использовать. – abbath

0
  1. сделать статический newInstance (params) в вашем DialogFragments
  2. создать цепочку аргументов
  3. do ListFragmentDialog.newInstance (params) .show(); где необходимо
Смежные вопросы