Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
404 views
in Technique[技术] by (71.8m points)

android - Send values from ViewPager Activity to a Fragment by bundle

I have an ViewPager Activity that call the fragment that represent the slide layout.

What i need is pass values from activity to fragment by bundle. How i can do this? I try pass a int 2 in onCreate() but not work and i

Activity:

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen_slide);
    Intent intent = new Intent(this,ScreenSlidePageFragment.class);
    Bundle bundle = new Bundle();
    bundle.putInt("SIDE",2);
    intent.putExtras(bundle);
/**
 * Instantiate a ViewPager and a PagerAdapter
 */

    mPager = (ViewPager)findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
    mPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            if(itemOld > arg0){
                auxBack--;
                SIDE=1;
            }
            else if(itemOld < arg0){
                auxFront++;
                SIDE=0;
            }
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });
}

@Override
public void onBackPressed(){
    if(mPager.getCurrentItem()==0){
        super.onBackPressed();
    }else{
        mPager.setCurrentItem(mPager.getCurrentItem()-1);
    }
} 


/**
 * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in sequence
 */

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{
    public ScreenSlidePagerAdapter(FragmentManager fm){
        super(fm);
    }

    @Override
    public ScreenSlidePageFragment getItem(int arg0) {
        return new ScreenSlidePageFragment();
    }

    @Override
    public int getCount() {
        //Toast.makeText(getApplicationContext(), "Num pages " + NUM_PAGES, Toast.LENGTH_LONG).show();
        return  NUM_PAGES;
    }
}

}

Fragment:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle    savedInstanceState) {

    int tID = ((ScreenSlidePagerActivity)getActivity()).getIntent().getExtras().getInt("SIDE");
    Toast.makeText(getActivity(), "Side selected....." +tID,   Toast.LENGTH_LONG).show();
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You have to set your Bundle through setArguments() method, not the intent. If you have a ViewPager, you can pass your arguments to the PagerAdapter, and set the arguments when the Fragment is being instantiated.

I don't get how your SIDE is calculated and what does it mean, so I show the general ide.

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen_slide);
    Bundle bundle = new Bundle();
    bundle.putInt("SIDE",2);
    mPager = (ViewPager)findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager(), bundle);
    mPager.setAdapter(mPagerAdapter);
}


private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{

    private final Bundle fragmentBundle;

    public ScreenSlidePagerAdapter(FragmentManager fm, Bundle data){
        super(fm);
        fragmentBundle = data;
    }

    @Override
    public ScreenSlidePageFragment getItem(int arg0) {
        final ScreenSlidePageFragment f = new ScreenSlidePageFragment();
        f.setArguments(this.fragmentBundle);
        return f;
    }

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

Fragment

@Override
public void onCreate(Bundle state) {
    super.onCreate(state);
    final Bundle args = getArguments();
    final int side = args.getInt("SIDE");
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...