Я знаю, что это немного не ответ, но попытка контролировать вашу деятельность из вашего фрагмента - это плохая практика.
Если вам нужно ссылаться на активность, чтобы получить контекст или что-то, то вы просто используете getActivity()
внутри фрагмента. Если вы ссылаетесь на класс через B.getActivity()
, он будет пустым, так как вы не смотрите на экземпляр класса, а на конструкцию класса. Поскольку Activity не привязана до создания фрагмента (даже если это происходит в XML), ссылка на ClassName.getActivity()
не даст вам ничего. Поэтому просто позвоните getActivity()
, чтобы добраться до него.
Лучший способ обработки связи между фрагментами и действиями - использовать интерфейсы и обратные вызовы для отправки конкретной информации. Вы не должны контролировать свое приложение из Фрагмента, действие должно быть сделано. Вам нужно только отправить небольшие фрагменты информации из вашего фрагмента обратно в родительскую активность.
Пример: В вашем фрагменте:
private OnFragmentInteractionListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnEDHGameStartListener");
}
}
//the way to pass information here. Can use return values if you'd like
//this is what the activity needs to implement
public interface OnFragmentInteractionListener {
void thingHappened(String theInformation);
}
//when that thing happens that you want to communicate you call back to the
//activity like so:
public void someAction() {
mListener.thingHappened("the information");
}
В вашей деятельности, вы реализуете MyFragmentClass.OnFragmentInteractionListener
, а затем вы можете обрабатывать информацию, передаваемую между двумя путем переопределения метода.
public class MyActivity extends AppCompatActivity implements MyFragment.OnFragmentInteractionListener{
// most of the code here...
//now implement the listener.
@override
public void thingHappened(String information){
//what you want the activity to do with the information
}
}
Вы хотите активность доступа к процессу доступа? –
, пожалуйста, убедитесь, что вы вызываете getActivity в или после onAttach – Ramit