У меня есть фрагмент, который содержит кнопку. Я хочу повторно использовать этот фрагмент, чтобы OnClickListener не был жестко запрограммирован, а определялся действием, которое вызывает этот фрагмент. Activity реализует для этого необходимый интерфейс, и Fragment получает ссылку в своем методе oncreate.
У меня есть два вопроса по этому вопросу ниже
public void TestFragment extends Fragment {
...
private IAction mAction = null;
@Override
public void OnAttach(Context ctx) {
mAction = (Action) getActivity();
}
@Override
public void onClickListener() {
action(this);
}
public interface IAction {
void action(Fragment f);
}
...
}
public class MainActivity extends AppCompatActivity implements IAction {
...
public void onCreate() {
getSupportFragmentManager().beginTransaction()
.add(R.id.content, Testfragment.gestInstance()
.commit();
}
public void IAction(Fragment f) {
f.doSomething()...
}
...
}
Это хорошая практика для создания фрагментов многократного использования?
Я хотел бы расширить это: если этот фрагмент открывается действием, он использует действие, определенное в действии. Хорошо, это работает. Это текущее поведение.
Но, возможно, этот фрагмент открывается другим фрагментом (вложенным), поэтому getActivity неверно. Есть ли что-то вроде
if(parent.isActivity) {
mAction = (Action) getActivity()
} else if(parent.isFragment) {
mAction = (Action) getParentFragment()
}