0

我看到处处都是,但是在每个帖子中问题似乎都持续存在。我已经使用FragmentStatePageAdapter实现了一个viewpager。虽然片段在UI上正确显示,但当我尝试将值传递给片段时,应用程序崩溃,因为片段未初始化。为了检查我在每个部分放了一个日志,只有第一个和第三个日志出现了。这是我的代码。Viewpager显示正确的片段,但没有初始化它

代码

public class MainActivity extends FragmentActivity implements  OnDataReceivedListener, OnStateChangedListener { 

    ViewPager viewPager; 
    PagerAdapter pagerAdapter; 
    private ImageView logo; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     logo = (ImageView)findViewById(R.id.logo); 

     viewPager = (ViewPager)findViewById(R.id.viewpager_first); 
     pagerAdapter= new PagerAdapter(getSupportFragmentManager(),3); 
     CircleIndicator indicator (CircleIndicator)findViewById(R.id.indicator); 
     viewPager.setAdapter(pagerAdapter); 
     indicator.setEnabled(true); 
     indicator.setViewPager(viewPager); 

     logo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       flipApi.startScan(); 
      } 
     }); 

    } 


    class PagerAdapter extends FragmentStatePagerAdapter { 

     int num; 
     public PagerAdapter(FragmentManager fm, int x) { 
      super(fm); 
      this.num=x; 
     } 

     public Fragment currentFragment; 

     @Override 
     public Fragment getItem(int position) { 
      //add new fragment here for homepage viewpager 

      switch (position) { 

       case 0: 
        currentFragment = new Calorie_Fragment(); 
        Log.d("flip",1+""); 
        return currentFragment; 


       case 1: 
        currentFragment = new HeartRate_Fragment(); 
        Log.d("flip",2+""); 
        return currentFragment; 


       case 2: 
        currentFragment = new Steps_Fragment(); 
        Log.d("flip",3+""); 
        return currentFragment; 


       default: 
        return null; 

      } 

     } 

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

     public Fragment getCurrentFragment() { 
      return this.currentFragment; 
     } 
    } 
} 

这里是我的日志:

04-19 17:43:40.374 30949-30949/com.example.riche.flip_final D/flip: 1 
04-19 17:43:40.388 30949-30949/com.example.riche.flip_final D/flip: 2 
04-19 17:43:41.386 30949-30949/com.example.riche.flip_final 
I/Choreographer:Skipped 61 frames! The application may be doing too 
much work on its main thread. 
04-19 17:43:44.539 30949-30949/com.example.riche.flip_final D/flip: 3 
04-19 17:43:44.560 30949-30949/com.example.riche.flip_ 
final W/FragmentManager: moveToState: Fragment state for Steps_Fragment{33bf8e3 #2 id=0x7f0d0075} not updated inline; expected state 3 found 2 
04-19 17:43:46.999 30949-30949/com.example.riche.flip_final D/flip: 1 
04-19 17:43:47.008 30949-30949/com.example.riche.flip_final W/FragmentManager: moveToState: Fragment state for Calorie_Fragment{208d45e #1 id=0x7f0d0075} not updated inline; expected state 3 found 2 
04-19 17:43:48.105 30949-30949/com.example.riche.flip_final D/flip: 3 
04-19 17:43:48.115 30949-30949/com.example.riche.flip_final W/FragmentManager: moveToState: Fragment state for Steps_Fragment{fd45d27 #2 id=0x7f0d0075} not updated inline; expected state 3 found 2 
+0

我试着把代码放在这里,但它不断给出一个关于缩进的错误。 –

+0

邮政堆栈跟踪。 –

+0

没有崩溃。如果你愿意,我可以发布日志。 –

回答

1

试试这个。 :)

class PagerAdapter extends FragmentStatePagerAdapter { 

HeartRate_Fragment heartRate_fragment; 
Calorie_Fragment calorie_fragment; 
Steps_Fragment steps_fragment; 

int num; 
public PagerAdapter(FragmentManager fm, int x) { 
    super(fm); 
    this.num=x; 
} 
@Override 
public Fragment getItem(int position) { 
    //add new fragment here for homepage viewpager 

    switch (position) { 

     case 0: 
      if(heartRate_fragment == null) 
      heartRate_fragment = new HeartRate_Fragment(); 
      Log.d("flip",1+""); 
      return heartRate_fragment; 


     case 1: 
      if(calorie_fragment == null) 
      calorie_fragment = new Calorie_Fragment(); 
      Log.d("flip",2+""); 
      return calorie_fragment; 


     case 2: 
      if(steps_fragment == null) 
      steps_fragment = new Steps_Fragment(); 
      Log.d("flip",3+""); 
      return steps_fragment; 


     default: 
      return null; 

    } 

} 

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

public HeartRate_Fragment getHRFragment() 
{ 
    return heartRate_fragment; 
} 
public Calorie_Fragment getCalorie_fragment() 
{ 
    return calorie_fragment; 
} 
public Steps_Fragment getSteps_fragment() 
{ 
    return steps_fragment; 
} 
+0

圣牛。是的,我应该想到这一点。谢谢。 –