2015-12-08 3 views
2

У меня есть пейджер View внутри Fragment Activity и View pager Содержит два фрагмента в начале действия. У меня есть запрос на отдых, и когда я получаю ответ, я хочу обновить Views внутри каждого фрагмента и в каждом из них я использую getActivity, но моя проблема заключается в том, что я всегда получаю исключение null-указателя на getActivity только на планшетных устройствах, но я не получил эту проблему на мобильных телефонах.getActivity from фрагмент внутри View pager return null

это мой адаптер пейджера

public class Guide_ViewPager_adapter extends FragmentStatePagerAdapter { 
    private Guides_fragment guide_frag = new Guides_fragment(); 
    private Maps_fragment maps_frag = new Maps_fragment(); 

    public Guide_ViewPager_adapter(FragmentManager fm){ 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return guide_frag; 
      case 1: 
       return maps_frag; 
     } 
     return null; 

    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 
} 

LogCat сниппет:

неустранимые: Основной процесс: android.vi.com.vad, ПИД: 9554 java.lang.NullPointerException на android.vi.com.vad.Guides_fragment.update (Guides_fragment.java:138) в android.vi.com.vad.Guide_activity $ GuideTask.onPostExecute (Guide_activity.java:213) в android.vi.com.vad.Guide_activity $ GuideTask.onPostExecute (Guide_activity.java:165) в android.os .AsyncTask.finish (AsyncTask.java:632) на android.os.AsyncTask.access $ 600 (AsyncTask.java:177) на android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:645) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:149) на android.app.ActivityThread.main (ActivityThread.java:5234) на java.lang.reflect.Method.invokeNative (собственный метод) на java.lang.reflect.Method.invoke (Method.java:515) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:609) при г alvik.system.NativeStart.main (Родной метод)

Это метод, который я называем его изнутри активности, когда данные загружены

public void update(String result) { 
    if (animation != null) { 
     animation.reset(); 
     animation.cancel(); 
    } 
    if (loaderImage != null) { 
     loaderImage.clearAnimation(); 
     loaderImage.setVisibility(View.GONE); 
    } 
    if (result.equalsIgnoreCase("null")) { 
     if (errorImage != null) { 
      errorImage.setVisibility(View.VISIBLE); 
     } 
    } else { 
     Guide_GridView_adapter adapter = new Guide_GridView_adapter(activity.getApplicationContext(), Guide_activity.Downloads_Guides); 
     guides_gridView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
    } 
} 

и здесь, когда я установить значение активности:

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

Вы используете другой планшет на планшете? Можете ли вы опубликовать функцию, содержащую getactivity, которая дает null? – QuantumTiger

+0

Просьба указать logcat для точной отладки –

+0

Спасибо, ребята за ваш ответ, я еще не создал планшет планшета, но я просто хочу проверить активность на планшете перед созданием планшета планшета – Tony

ответ

0

Я решил мой проблема, вызвав setRetainInstance (true) в Fragment onCreate()

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 
+1

Определите, сохраняется ли экземпляр фрагмента в процессе повторного создания активности (например, при изменении конфигурации). Это можно использовать только с фрагментами, не входящими в задний стек. Если установлено, жизненный цикл фрагмента будет немного отличаться при воссоздании активности: onDestroy() не будет вызываться (но onDetach() все равно будет, поскольку фрагмент отделяется от его текущей активности). onCreate (Bundle) не будет вызываться, так как фрагмент не будет повторно создан. onAttach (Activity) и onActivityCreated (Bundle) все равно будут вызываться. –

0

Зачем вам нужно позвонить getActivity? Активность передается как параметр? т.е.

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

Сказав, что, если вы кодирования на уровнях последних API onAttachActiviy (активность) является устаревшим, и вы должны использовать onAttachActivity (Context) вместо

см Android Fragment onAttach() deprecated

+0

Я попытался использовать this.activity = activity; но я получил тот же результат, также я не мог нормально переопределить метод onAttachActivity (Context) – Tony

+0

Используете ли вы импорт android.support.v4.app.Fragment; ? – QuantumTiger

+0

Да, я использую android.support.v4.app.Fragment – Tony

Смежные вопросы