Вызов методов активности из фрагмента
Я использую фрагмент только внутри одной конкретной родительской активности. Теперь я задаюсь вопросом, есть ли недостатки, если я вызываю методы в родительской активности непосредственно из включенного фрагмента следующим образом:
getActivity(). SomeMethodInParentActivitiy()
Более распространенным решением было бы определить формальный интерфейс слушателя во фрагменте для возврата к родительской активности, а затем сделать реализацию этого интерфейса.
Есть ли какие-либо причины (например, надежность или скорость), почему я должен использовать второе более сложное решение вместо прямых вызовов метода из фрагмента в активность?
Ответы
Ответ 1
Не смотрите на производительность в начале. Помните: "преждевременная оптимизация - это корень всего зла". Второй подход лучше, потому что ваш фрагмент можно использовать в разных действиях. Первый подход вводит больше зависимостей в ваш код, фрагмент зависит от типа активности. Вы теряете способность тестировать, повторно использовать, небольшой комплекс. Сейчас это может показаться более простым, но в будущем вы увидите: -)
Ответ 2
Необходимо выполнить дополнительные действия:
Activity activity123 = getActivity();
if(activity123 instanceof ParentActivity) {
((ParentActivity) activity123).someMethodInParentActivity();
}
однако, как писал @pawelzieba, если вы хотите использовать этот фрагмент в других действиях, которые, вероятно, будут работать так. Cheers
Ответ 3
Когда мне нужно сделать что-то подобное, я просто использую BroadcastReceiver, чтобы я мог его вызвать из любой точки.
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
if (action.equals("WHATEVER_ACTION")) {
// Do stuff
}
}
}
};
Тогда в моем фрагменте я просто использую:
activity.sendBroadcast(новый Intent(). setAction ( "WHATEVER_ACTION" ));