2015-08-29 4 views
0

Я использую viewpager, но имею проблему с фрагментом. Мой фрагмент onCreateView вызывается дважды. Вот мой код Adapter:Почему фрагмент onCreateView вызывается дважды?

public class QuestionAdapter extends FragmentStatePagerAdapter { 

/** 
* @param fm 
*   Fragment manager 
*/ 
public QuestionAdapter(FragmentManager fm) { 
    super(fm); 

} 

/* 
* (non-Javadoc) 
* 
* @see android.support.v4.app.FragmentStatePagerAdapter#getItem(int) 
*/ 
@Override 
public Fragment getItem(int position) { 

    if (position == 4) { 

     return InfoFragment.getInstance(); 
    } 

    return QuestionFragment.getInstance(position); 
} 

/* 
* (non-Javadoc) 
* 
* @see android.support.v4.view.PagerAdapter#getCount() 
*/ 
@Override 
public int getCount() { 

    return 5; 
} 

/* 
* (non-Javadoc) 
* 
* @see 
* android.support.v4.view.PagerAdapter#getItemPosition(java.lang.Object) 
*/ 
@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

Мой фрагмент кода:

public class QuestionFragment extends Fragment { 

private int mPos; 

@Bind(R.id.fragment_question_group_layout) 
RadioGroup questionGroup; 

public static QuestionFragment getInstance(int pos) { 

    QuestionFragment fragment = new QuestionFragment(); 
    fragment.setPos(pos); 
    return fragment; 
} 

public void setPos(int pos) { 
    this.mPos = pos; 
} 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
     @Nullable Bundle savedInstanceState) { 

    LogUtil.e("QuestionFragment", "Pos : " + mPos); 
    View view = inflater.inflate(R.layout.fragment_question, container, false); 
    ButterKnife.bind(this, view); 

    switch (mPos) { 

     case 0 : 

      displayQuestion(getResources().getStringArray(R.array.question1_content)); 
      break; 
     case 1 : 

      displayQuestion(getResources().getStringArray(R.array.question2_content)); 
      break; 
     case 2 : 

      displayQuestion(getResources().getStringArray(R.array.question3_content)); 
      break; 
     default : 

      displayQuestion(getResources().getStringArray(R.array.question4_content)); 
      break; 
    } 

    return view; 
} 

А вот журнал:

  • E/QuestionFragment: Pos: 0
  • E/QuestionFragment : Pos: 1
  • E/QuestionFragment: Pos: 2
  • Е/QuestionFragment: Позы: 3
  • Е/InfoFragment: Позы:
  • Е/QuestionFragment: Позы: 0
  • Е/QuestionFragment: Позы: 0
  • Е/QuestionFragment: Позы: 0
  • E/QuestionFragment: Pos: 0
  • E/InfoFragment: Pos:

Edit: Я уже установил: viewPager.setOffscreenPageLimit (4); по активности И выше бревна, полученные, когда я открываю активность, не салфетки. Просто откройте деятельность и получить журналы

+0

Я не вижу проблемы. 'onCreateView()' вызывается всякий раз, когда фрагмент (воссоздается). «FragmentStatePagerAdapter» предназначен для создания и уничтожения фрагментов «на лету». Он также - по умолчанию - сохраняет только ток, а также соседние (левый/правый) фрагменты. Поэтому, если вы перелистываете страницы, это нормально. – dhke

+0

Проблема: я уже установил viewPager.setOffscreenPageLimit (4); И почему во 2-м звонке мой pos = 0? Отлаженный и на getItem адаптера, мой фрагмент называется 1 раз Также, выше, журнал регистрируется при открытии активности - не перебирайте пейджер –

+0

Почему вы возвращаете POSITION_NONE вместо POSITION_UNCHANGED в getItemPosition()? –

ответ

0

Я исправил мою проблему, и это: ориентация

  • моего телефона является: портрет
  • Моих приложений являются: пейзаж

Когда я запускаю мое приложение, то фрагмент будет воссоздаваться из-за изменения конфигурации. Я гнал

android:configChanges="keyboardHidden|screenSize|orientation" 

на манифеста, то все работает

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