2015-05-30 2 views
1

У меня есть список объектов Предложение и их данные Я пытаюсь заполнить фрагменты (один объект на фрагмент). Он работает таким образом, что он показывает их, но первый, который показан, действительно второй, и после того, как я дважды прокручусь влево и вернусь к первому, то он есть (первый)Первый фрагмент, показанный в ViewPager, является вторым, который я создал

Я знаю что этот вопрос относится к этой одной

ViewPager first fragment shown is always wrong with FragmentStatePager

Но вопрос само answerd и не вполне понятно, так что я действительно нужна помощь

Это я код: Внутри фрагмента деятельности

public class OffersDisplay extends FragmentActivity { 
      /*some inicializations for layout and stuff*/ 

      listOfOffers = (ArrayList<Offer>) getIntent().getSerializableExtra("listOfOffers"); 
... 
      public static class MyAdapter extends FragmentStatePagerAdapter { 
     public MyAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 

     } 

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

     @Override 
     public Fragment getItem(int position) { 
      return ImageFragment.init(listOfOffers.get(position)); 
     } 

    } 
} 

И мой ImageFragment класс индивидуальный и выглядит как этот

public class ImageFragment extends Fragment { 
    //some inits again 
     public static ImageFragment init(Offer offer) { 

      // Supply val input as an argument. 
      name = offer.getName(); 
      description = offer.getDescription(); 
      moreInfoURL = offer.getMoreInfoURL(); 
    return new ImageFragment(); 
     } 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     layoutView = inflater.inflate(R.layout.fragment_image, container, 
       false); 
     tv = layoutView.findViewById(R.id.text); 
     ((TextView) tv).setText(name + "\n"+ description); 
     iview = layoutView.findViewById(R.id.image); 

      //...some inits 
     ((ImageView) iview).setImageBitmap(pic); 

     return layoutView ; 
    } 

}

+0

У кого-нибудь есть идеи? Я тоже сталкиваюсь с той же проблемой с FragmentStatePagerAdapter и Viewpager. Помощь Pls. –

+0

Рекомендации по предложению связанного вопроса не работают. Я пробовал с помощью простого массива String a, b, c, d и получаю страницы b, b, c, d и прокручивая назад с c или d, -> c, b, a или d, c, b, a , FIRST элемент oncreateView/onCreate() никогда не вызывается –

ответ

1

Я установил этот вопрос. Причина, по которой он был взломан, заключается в том, что по какой-то причине (непонятно мне) вы не можете инициализировать значения, требуемые фрагментом (ImageFRagment в вашем примере), в его инициализированном или заводском методе и рассчитывать использовать его позже при создании представлений для сохранения порядок на месте. Вы ДОЛЖНЫ передать значения в качестве аргументов фрагменту через аргументы (bundle). Следовательно, если у адаптера есть 4 страницы с контентом A, B, C, D при запуске пейджера, onCreateView и onCreate будут вызваны для элемента [0], т.е. A. В моем случае я бы всегда получить B, B, C, D и считывания обратно D, C, B, A.

так, чтобы исправить код `публичный статический ImageFragment INIT (предложение предложение) {

ImageFragment fragment = new ImageFragment(); 
    Bundle args = new Bundle(); 


    String name = offer.getName(); 
    String description = offer.getDescription(); 

    args.putString(ARG_NAME, name); 
    args.putString(ARG_CONTENT, description); 


    fragment.setArguments(args); 

    return fragment; } 

затем на вашем OnCreate() вы должны инициализировать значения, необходимые для вашего мнения, используя аргументы:

mName = getArguments().getInt(ARG_NAME); 
content = getArguments().getString(ARG_CONTENT); 

в вашем onCreateView(), вы можете получить доступ к этим данным с помощью вспомогательных функций для их извлечения ,

((TextView) rootView.findViewById(android.R.id.text1)).setText(getContent()); ((TextView) rootView.findViewById(R.id.article_content)).setText(getPageNumber());

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