-1

私はこの問題に直面しましたが、おそらくすでに同じ問題がありますが、このページでは見つかりません。だから私の問題は、ViewPagerを初期化するアクティビティがあり、このビューページに2つのフラグメントがあることです。親アクティビティーからViewPagerのフラグメントへのアクセスID

My活動:

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の多くが持っていると、正常にそれらを得るが、I ViewPagerの両方のフラグメントに何とかして渡す必要がありますが、どうすればこの問題を解決できますか?

+0

あなたは必要なものは何でもあなたのアダプターにデータを渡さなければなりませんoフラグメントに転送し、readyandroidの答えを確認します。 –

答えて

1

この1とあなたのコードをチェックしてください:

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*/); 

のように:

getArguments().getInt("shop_id", -1); 

アダプターのsetExtraDataメソッドでここでやっているように、単一の単一値ではなくインテントを渡すことで、同じシナリオを達成できます。

2

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 

} 

次のようにあなたのViewPagerアダプタを変更し、あなたのフラグメントでバンドルを取得し、あなたの活動からViewPagerアダプタにバンドルとして

adapter = new ViewPagerAdapter(getSupportFragmentManager(), getIntent().getExtras()); 

をIDを渡し

Bundle bundle = getArguments(); 
shopId = bundle.getInt(ShoppingDetailsActivity.SHOP_ID); 
関連する問題