Передача позиции в качестве аргумента фрагменту в FragmentPagerAdapter

Позиция getItem() не всегда правильная! Иногда он будет показывать 0,1,2,3,4, тогда, если я вернусь, он покажет другую позицию (4,2,3,1,0). Как правильно использовать «позицию», если мне нужно, чтобы позиция передавалась в массив/карту дерева???

02-18 20:07:22.453  11479-11479/com.app E/aaa﹕ position created:0
02-18 20:07:22.453  11479-11479/com.app E/aaa﹕ position created:1
02-18 20:07:29.053  11479-11479/com.app E/aaa﹕ position created:2
02-18 20:07:35.503  11479-11479/com.app E/aaa﹕ position created:0

Линия:

 return SingleCard.newInstance(get_all_cards_as_objects().get(position));

Нужна правильная позиция, а не та, которая рендерится в память! Мне нужно, чтобы данные внутри фрагмента менялись с фактической позицией страницы. Он будет знать данные для захвата (с карты) на основе фактического положения страницы.

final ViewPager pager = (ViewPager) findViewById(R.id.pager);
        this.parent_nested_fragment_activity = this;

        pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()){
            private final int PARENT_COUNT = get_all_cards_as_objects().size();

            @Override
            public Object instantiateItem(ViewGroup container, final int position) {
                Object obj = super.instantiateItem(container, position);
                pager.setObjectForPosition(obj, position);
                return obj;
            }

            @Override
            public Fragment getItem(int position) {
            Toast.makeText(CardDealer.this,"Selected page position: " + position, Toast.LENGTH_SHORT).show();
            Log.e("aaa", "position created:" + position);
                    return SingleCard.newInstance(get_all_cards_as_objects().get(position));
            }

У меня такая же проблема, но этот ответ не помог: FragmentPagerAdapter getItem неправильная позиция

Я также не уверен, как реализовать этот ответ в своих фрагментах: время в FragmentPagerAdapter

Например: Странные исчезающие фрагменты с FragmentPagerAdapter

В основном я изучил:

pager.getCurrentItem();

Как мне передать это в уже созданный фрагмент с помощью getItem();

 return SingleCard.newInstance(get_all_cards_as_objects().get(pager.getCurrentItem()));

person Petro    schedule 18.02.2015    source источник


Ответы (2)


Хорошо, я понял, у фактического фрагмента, который я создавал, была проблема. Я использовал статический int внутри своего фрагмента SingleCard. Изменение его на нестатическое int устранило проблемы!

   //problem:
     private static int page;
   //solution:
     private int page;

public class SingleCard extends Fragment {
    public static SingleCard newInstance ( int sent_in_position ) {
        SingleCard fragmentFirst = new SingleCard ();
        Bundle args = new Bundle();
        args.putInt("position", sent_in_position);
        fragmentFirst . setArguments(args);
        return fragmentFirst;
    }

@Override
public void onCreate (Bundle savedInstanceState ) {
    super.onCreate(savedInstanceState);
    page = getArguments().getInt("position", 0);
}
person Petro    schedule 19.02.2015

Кроме того, проверьте, является ли getArguments() нулевым, потому что если нуль вернет ошибку

page = getArguments() != null ? getArguments().getInt("position") : 0;
person Daniel Nyamasyo    schedule 07.01.2020