У меня есть два фрагмента (каждая вкладка в активности скользящей вкладки) в моем приложении. У двух фрагментов есть некоторые методы, которые теперь идентичны, я думал, что я мог бы абстрагировать эти методы, чтобы следовать принципу СУХОЙ (не повторяй себя). Есть ли рекомендуемый способ сделать это?Пусть Фрагменты используют один и тот же метод
Является ли класс утилиты со статическими методами хорошим способом? Или я должен создать абстрактный класс «MyAbstractFragment», который имеет эти методы и позволяет фрагментам расширять этот класс?
Например.
public class MyCustomFragment extends Fragment {
protected LinearLayout linearLayout;
protected MyAdapter adapter;
//more common fields
void addButtonToFragmentView(final String btnText) {
final Button btn = new Button(getContext());
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
linearLayout.removeView(btn);
}
});
btn.setText(btnText);
linearLayout.addView(btn);
}
void upDateAdapterList(List<String> list){
//....
adapter.updateList(list);
}
}
Чем мои фрагменты могут расширить этот класс и установить свойства и использовать методы. Но я также вижу, что я также мог бы сделать статический класс для использования только для методов, таких как addButtonToFragmentView(final String btnText, Context context, final LinearLayout linearLayout)
и upDateAdapterList(List<String> list, MyAdapter adapter)
Или есть предпочтительный способ сделать это?
Почти как я сделал, но просто переместить метод addButtonToFragmentView к UIFactory класса? чем мне пришлось бы создать делегат для кнопок onClickListerner? Это похоже на более стандартный подход, поскольку метод кнопки добавления можно легко использовать повторно. Я помечаю этот ответ, а принятый, но im открыт для большего ввода. – user3711421
Если это так, то ваш addButtonToView примет OnClickListener, а также параметр. Я сказал, чтобы перенести его на фабрику пользовательского интерфейса, потому что, если будущее говорит, что любая активность и фрагмент могут требовать динамического добавления просмотров. Поэтому они просто будут использовать этот класс UIFactory. –