-1

Я столкнулся с этой проблемой, возможно, есть и та же проблема, но я не могу найти ее на этой странице. Поэтому моя проблема в том, что у меня есть моя активность, которая инициализирует ViewPager, и у меня есть 2 фрагмента в этом представлении.Идентификатор доступа от родительской активности к фрагментам в 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() и получить их успешно, но я также нужно каким-то образом передать мои оба фрагмента в ViewPager, как я могу решить эту проблему?

+0

Вы должны передавать данные на ваш адаптер, что бы вы ни хотели o переслать фрагмент, проверить ответ на готовность. –

ответ

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

Проходит идентификаторы как расслоении к 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); 
Смежные вопросы