2015-09-13 4 views
1

Я работаю с ящиком навигации по MainActivity, а затем я использую этот ящик для перемещения, чтобы заменить различные фрагменты в контейнере MainActivity. Во Фрагменте я использую Google Map. В этом фрагменте я также использую библиотеку Ion для загрузки информации о местоположении с сервера и отображения их на карте.Как получить контекст фрагмента перед его представлением

Навигационных выдвижных деталей Главные, друзья место, о нас

теперь, когда я нажимаю на другом месте, я хочу рисовать штырьки на карте, так что я U , используя ту же карту на главном экране, как На главном экране также отображается карта.

Что я делаю на друг пункта расположения как под

myMapFragment = new MyMapFragment(); 

         fragmentTransaction1.replace(R.id.frame, myMapFragment, "MyMapFragment").commit(); 
         fragmentManager.executePendingTransactions(); 
         myMapFragment.GetAllFriendsLocation("share",MainActivity.this); 

так GetAllFriendsLocation метод в этом фрагменте, который показывает карту и эта функция загружает информацию о местоположении с сервера, а затем сделать контакты на карта

это, как я делаю это

public void GetAllFriendsLocation(String type) { 
     MainActivity.setOverflowButtonColor(getActivity(),2); 
     if(cd.isConnectingToInternet()) { 
      progressDialog.show(); 
      Ion.with(getActivity()) 
        .load("http://myapi.com/data.php")... 

, но я получаю nulpointerException на следующей строке

Ion.with (getActivity()) .load ("http://myapi.com/data.php").

похоже, что getActivity пуст, поскольку фрагмент не полностью инициирован.

Поэтому, пожалуйста, дайте мне советы, как я могу вызвать метод фрагмента, когда он инициализирован и готов к показу на экране, после его инициализации метод должен запускаться и загружаться с сервера.

или второе, что я могу думать о том, как я могу получить контекст в mainactiivty до того, как фрагмент инициализируется ???

пожалуйста, помогите мне в этом ..

+0

Почему бы не просто передать контекст приложения к иону? – Bhargav

+0

@bhargav Что вы имеете в виду, объясните, пожалуйста, –

+0

getActivity(). GetApplicationContext(), это никогда не будет равным null, а Ion использует контекст для привязки своих потоков сетевого запроса к его жизненному циклу, поэтому, передавая applicationCpntext(), единственное различие поток запроса сети будет запущен, даже если была вызвана операция onDestroy(), если активен класс приложенияContext. – Bhargav

ответ

0

Попробуйте Создание и использование фрагмента с использованием экземпляра вместо конструктора. Создать экземпляр фрагмента в самом фрагменте класса, как это:

public static MyMapFragment newInstance(Bundle bundle) { 
    MyMapFragment fragment = new MyMapFragment(); 

    fragment.setArguments(bundle); 
    return fragment; 
} 

И тогда в вашей деятельности использовать его как это:

MyMapFragment fragment = MyMapFragment.getInstance(bundle); 

где расслоение содержит любую вещь, которую вы, возможно, пожелают отправить фрагмент , Это должно сработать.

+0

, где я должен написать этот код –

+0

заменить 'myMapFragment = новый MyMapFragment()' 'от фрагмента MyMapFragment = MyMapFragment.getInstance (расслоение);' и вставить функцию деЫпзЬапса() в классе фрагмента. Удалите аргумент связки, если он вам не нужен. – Saurabh

0

Вы должны использовать методы onCreate() и onViewCreated().

Вы загружаете фрагмент внутри метода onCreate(). и метод вызова в методе onViewCreated().

+0

Не могли бы вы рассказать мне, как загрузить фрагмент в методе onCreate? –

0

Я думаю, что это похоже, чтобы здесь android get activity returns null

Как мой взгляд, прежде чем делать что-то с getActivity вы должны проверить Fragment isSafe или не безопасно, как: (рекомендуется)

private boolean isSafe() 
{ 
    if (this.isRemoving() || this.getActivity() == null || this.isDetached() || !this.isAdded() 
        || this.getView() == null) 
    { 
     return false; 
    } 

    return true; 
} 

Или кэшировать деятельность как

private Activity mActivity; 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.mActivity = activity; 
} 
+0

Я уже реализовал это, OnAttach и использовал mActivity в Ion, но не помогал –