2016-08-16 5 views
0

В моей активности содержится фрагмент A, встроенный через XML, который содержит фрагмент B, встроенный в XML.Доступ к активности из фрагмента во фрагменте, загружаемом через XML.

Когда я вызываю B.getActivity(), я не получаю никакого возврата. Есть ли простой способ получить доступ к активности из B?

+0

Вы хотите активность доступа к процессу доступа? –

+1

, пожалуйста, убедитесь, что вы вызываете getActivity в или после onAttach – Ramit

ответ

1

Я знаю, что это немного не ответ, но попытка контролировать вашу деятельность из вашего фрагмента - это плохая практика.

Если вам нужно ссылаться на активность, чтобы получить контекст или что-то, то вы просто используете 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 
    } 
} 
Смежные вопросы