Повторное использование фрагмента с гибкими слушателями - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть фрагмент, который содержит кнопку. Я хочу повторно использовать этот фрагмент, чтобы 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()...
    } 

    ...
}
  1. Это хорошая практика для создания фрагментов многократного использования?

  2. Я хотел бы расширить это: если этот фрагмент открывается действием, он использует действие, определенное в действии. Хорошо, это работает. Это текущее поведение.

Но, возможно, этот фрагмент открывается другим фрагментом (вложенным), поэтому getActivity неверно. Есть ли что-то вроде

if(parent.isActivity) {
  mAction = (Action) getActivity()
} else if(parent.isFragment) {
  mAction = (Action) getParentFragment()
}

1 Ответ

0 голосов
/ 13 ноября 2018

getActivity() все равно будет работать, даже если фрагмент вложен в другой.

Но если вы хотите разделить его на родительском фрагменте, вы можете использовать getParentFragment()

if (getParentFragment() != null) {
   // fragment is nested
} else {
   // not nested
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...