2016-05-09 2 views
0

3 фрагмента будут отображаться на ViewPager с помощью FragmentStatePagerAdapter.Android FragmentStatePagerAdapter Preload Fragment

Я назвал эти фрагменты и 3 фрагменты привышные компоновки

1.StepOneFragmet

2.StepTwoFragmet

3.StepThreeFragmet

Мне нужно получить данные из Сервер и привязывать эти данные к разным фрагментам отдельно. Как я могу создать и инициализировать 3 фрагмента, когда я загрузил viewpager?

Если я получаю доступ к StepThreeFragment, он вернет исключение NullpointerException. Это означает, что система не создала и не инициализировала фрагмент.

Есть мои коды:

активность:

mPager = (ViewPager) findViewById(R.id.pager); 
mFragments = new ArrayList<>(); 
mFragments.add(new StepOneFragment()); 
mFragments.add(new StepTwoFragment()); 
mFragments.add(new StepThreeFragment()); 

mPagerAdapter = new StepPagerAdapter(getSupportFragmentManager(),mFragments); 
mPager.setAdapter(mPagerAdapter); 

StepThreeFragment f = (StepThreeFragment)((StepPagerAdapter) mPager.getAdapter()).getmFragments().get(2); 
f.textView_profile.setText("1111");//--->NullPointerException 

StepPagerAdapter: Code

public ArrayList<Fragment> getmFragments(){ 
    return mFragments; 
} 

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

@Override 
public Fragment getItem(int position) { 
    return mFragments.get(position); 
} 

StepThreeFragment: (Например -> SetText из TextView)

+0

Не достаточно кода опубликовать более – Haroon

+0

@Haroon для тестирования этих 3 фрагментов - это один и тот же макет с одним TextView. Я хочу установить текст на третий фрагмент после загрузки viewpager. Итак, это код, который я опубликовал – user2520217

+0

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

ответ

1

активность:

//assign MyObject some valu form your web services 

mPagerAdapter = new StepPagerAdapter(getSupportFragmentManager()); 
mPager.setAdapter(mPagerAdapter); 
mPager.addFragments(MyObject obj); 

StepOneFragment.java

public static final StepOneFragment newInstance(MyObject obj){ 

    StepOneFragment f = new StepOneFragment(); 

    // Get arguments passed in, if any 
    Bundle args = f.getArguments(); 
    if (args == null) { 
     args = new Bundle(); 
    } 

    // Add parameters to the argument bundle 
    args.putParcelable("obj", obj);   // clone or referenced? 

    MyObject implements parcelable 
    f.setArguments(args); 

    return f; 

    } 

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

     MyObject object = getArguments().getParcelable("obj"); 

    } 

Fragmentstatepageradapter:

public fraf extends FragmentStatePagerAdapter{ 

    List<Fragment> fragments = new ArrayList(); 

    public fraf(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    public void addFragments(Myobject obj){ 

     fragments.add(StepOneFragment.newInstance(obj)); 
     fragments.add(StepTwoFragment.newInstance(obj)); 
     fragments.add(StepThreeFragment.newInstance(obj)); 
     notifydatasetchanged(); 

    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 
} 
+0

Спасибо за ваш ответ. Ваш ответ работает! Мне нужно передать данные, используя аргумент и Bundle. – user2520217

0

Попробуйте это:

StepThreeFragment f = (StepThreeFragment)((StepPagerAdapter) mPager.getAdapter()).getItem(2); 
f.textView_profile.setText("1111"); 
+0

не может писать на этом. Я пытался. Вид фрагмента не создается. Он покажет исключение nullpointer – user2520217

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