Android 从父活动到ViewPager中片段的访问Id

Android 从父活动到ViewPager中片段的访问Id,android,android-fragments,android-activity,android-viewpager,Android,Android Fragments,Android Activity,Android Viewpager,我曾经面对过这个问题,也许已经有同样的问题了,但是我在这个页面上找不到。所以我的问题是我有我的活动,它初始化了ViewPager,在这个ViewPager中有两个片段 我的活动: public class ShoppingDetailsActivity extends BaseActivity { ViewPagerAdapter adapter; @Bind(R.id.view_pager) ViewPager viewPager; @Bind(R.id.pager_tabs) Pager

我曾经面对过这个问题,也许已经有同样的问题了,但是我在这个页面上找不到。所以我的问题是我有我的活动,它初始化了ViewPager,在这个ViewPager中有两个片段

我的活动:

public class ShoppingDetailsActivity extends BaseActivity {

ViewPagerAdapter adapter;

@Bind(R.id.view_pager)
ViewPager viewPager;
@Bind(R.id.pager_tabs)
PagerSlidingTabStrip pagerSlidingTabStrip;

int shop_id;
int id;
int shop_sub_id;
int subId;
int shop_sub_sub_id;
int subSubId;
int shop_detail_id;
int detailId;

public static final String SHOP_ID = "shop_id";
public static final String SHOP_SUB_ID = "shop_sub_id";
public static final String SHOP_SUB_SUB_ID = "shop_sub_sub_id";
public static final String SHOP_DETAIL_ID = "shop_detail_id";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activityComponent().inject(this);
    setContentView(R.layout.activity_shopping_details);
    ButterKnife.bind(this);

    adapter = new ViewPagerAdapter(getSupportFragmentManager());

    viewPager.setAdapter(adapter);
    pagerSlidingTabStrip.setViewPager(viewPager);

    shop_id = getIntent().getIntExtra(SHOP_ID, id);
    shop_sub_id = getIntent().getIntExtra(SHOP_SUB_ID, subId);
    shop_sub_sub_id = getIntent().getIntExtra(SHOP_SUB_SUB_ID, subSubId);
    shop_detail_id = getIntent().getIntExtra(SHOP_DETAIL_ID, detailId);
}

}
我的适配器:

public class ViewPagerAdapter extends FragmentPagerAdapter {

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new InfoAdminFragment();
            break;
        case 1:
            fragment = new ViewAdminFragment();
            break;
        default:
            break;
    }

    return fragment;
}

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

@Override
public CharSequence getPageTitle(int position) {
    if (position == 0) {
        return "InfoAdminFragment";
    } else if (position == 1) {
        return "ViewAdminFragment";
    } else {
        return super.getPageTitle(position);
    }
}
}

正如您在我的活动中所看到的,我使用getIntent()获得了很多ID,并且成功地获得了它们,但我还需要在ViewPager中以某种方式将这两个片段传递给我,我如何才能使它们解决此问题?

使用以下代码检查您的代码:

private int shop_id;
private int shop_sub_id;
private int shop_sub_sub_id;
private int shop_detail_id;

public void setExtraData(int shopId, int shopSubId, shopSubSubId, shopDetailId) {
    this.shop_id = shopId;
    this.shop_sub_id = shopSubId;
    this.shop_sub_sub_id = shopSubSubId;
    this.shop_detail_id = shopDetailId;
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new InfoAdminFragment();
            break;
        case 1:
            fragment = new ViewAdminFragment();
            break;
        default:
            break;
    }

    setBundleData(fragment);

    return fragment;
}

public void setBundleData(Fragment fragment){
    Bundle bundle = new Bundle();
    bundle.putInt("shop_id", shop_id);
    bundle.putInt("shop_sub_id", shop_sub_id);
    bundle.putInt("shop_sub_sub_id", shop_sub_sub_id);
    bundle.putInt("shop_detail_id", shop_detail_id);
    fragment.setArguments(bundle);
}
在你的活动中:

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activityComponent().inject(this);
    setContentView(R.layout.activity_shopping_details);
    ButterKnife.bind(this);

    shop_id = getIntent().getIntExtra(SHOP_ID, id);
    shop_sub_id = getIntent().getIntExtra(SHOP_SUB_ID, subId);
    shop_sub_sub_id = getIntent().getIntExtra(SHOP_SUB_SUB_ID, subSubId);
    shop_detail_id = getIntent().getIntExtra(SHOP_DETAIL_ID, detailId);

    adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.setExtraData(shop_id, shop_sub_id, shop_sub_sub_id, shop_detail_id);
    viewPager.setAdapter(adapter);
    pagerSlidingTabStrip.setViewPager(viewPager);

}
在您的片段中,您可以获得:

getArguments().getInt(/*Key*/, /*Default value*/);
比如:


您可以通过传递intent而不是像我在这里在适配器的setextrada方法中所做的那样传递单个值来实现上述相同的场景。将ID的as bundle从您的活动传递到
ViewPager
适配器

adapter = new ViewPagerAdapter(getSupportFragmentManager(), getIntent().getExtras());
如下所示修改
ViewPager
适配器

public class ViewPagerAdapter extends FragmentPagerAdapter {
private Bundle bundle;

public ViewPagerAdapter(FragmentManager fm, Bundle bundle) {
    super(fm);
    this.bundle = bundle;
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new InfoAdminFragment();
            break;
        case 1:
            fragment = new ViewAdminFragment();
            break;
        default:
            fragment = new InfoAdminFragment();
            break;
    }
    fragment.setArguments(bundle);
    return fragment;
}

//other code

}
然后在你的碎片中找回包裹

Bundle bundle = getArguments();
shopId = bundle.getInt(ShoppingDetailsActivity.SHOP_ID);

您必须将数据传递到适配器,无论您想转发到哪个片段,请检查readyandroid应答。
Bundle bundle = getArguments();
shopId = bundle.getInt(ShoppingDetailsActivity.SHOP_ID);