Ric*_*ipe 10 android bundle android-fragments android-viewpager android-activity
我有一个ViewPager Activity,它调用代表幻灯片布局的片段.
我需要的是将值从活动传递到片段.我怎么能这样做?我尝试在onCreate()中传递一个int 2但不工作,我
活动:
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
}
分段:
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();
Run Code Online (Sandbox Code Playgroud)
Yar*_*lyk 27
您必须通过setArguments()方法设置Bundle,而不是intent.如果您有ViewPager,则可以将参数传递给PagerAdapter,并在实例化Fragment时设置参数.
我不知道你的SIDE是如何计算的,它是什么意思,所以我展示了一般的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;
}
}
Run Code Online (Sandbox Code Playgroud)
分段
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
final Bundle args = getArguments();
final int side = args.getInt("SIDE");
}
Run Code Online (Sandbox Code Playgroud)
这可能不是你要求的解决方案,但它是我做的,它可能会帮助某人:
在片段中创建一个公共方法:
public void doSomething(String myValue){
// Do stuff in your fragment with myValue
}
Run Code Online (Sandbox Code Playgroud)
在您的活动中,从适配器获取片段.根据添加的顺序,您知道它是哪个片段.执行您的片段方法,传入您的变量:
// Get FriendsFragment (first fragment)
MyFragment fragment = (MyFragment) mAdapter.getItem(0);
fragment.doSomething("some-value");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20886 次 |
| 最近记录: |