簡體   English   中英

Viewpager顯示正確的片段但未初始化

[英]Viewpager showing correct fragment but not initializing it

我到處都看過,但在每篇文章中,問題似乎仍然存在。 我已經使用FragmentStatePageAdapter實現了一個viewpager。 當片段在UI上正確顯示時,當我嘗試將值傳遞給片段時,由於片段未初始化,應用程序崩潰。 為了進行檢查,我在每個部分中都放置了一個日志,並且只顯示了第一個和第三個日志。 這是我的代碼。

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

嘗試這個。 :)

 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM