我正在使用fragmentpageradapter来膨胀片段,这是我的编码。 我正在一个片段中添加购物车项目并将其显示给其他片段,并且所有片段都以标签布局显示。我的问题是购物车项目在刷片段时不会刷新其他片段。
public class ProfileDetailePagerAdapter extends FragmentPagerAdapter
{
int TabCount;
HashMap<Integer, String> mFragmentTags;
FragmentManager mFragmentManager;
private boolean isPagingEnabled = true;
public ProfileDetailePagerAdapter(FragmentManager fm, int TabCount) {
super(fm);
this.TabCount = TabCount;
mFragmentTags = new HashMap<Integer, String>();
mFragmentManager = fm;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
MenuFragment tab1 = new MenuFragment();
return tab1;
case 1:
SelectMember_fragment tab2 = new SelectMember_fragment();
return tab2;
case 2:
ViewCart_fragment tab3 = new ViewCart_fragment();
return tab3;
/* case 3:
PaymentMode_fragment tab4=new PaymentMode_fragment();
return tab4;*/
}
return null;
}
@Override
public int getCount() {
return TabCount;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Object obj = super.instantiateItem(container, position);
if (obj instanceof Fragment) {
// record the fragment tag here.
Fragment f = (Fragment) obj;
String tag = f.getTag();
mFragmentTags.put(position, tag);
}
return obj;
}
public Fragment getFragment(int position) {
String tag = mFragmentTags.get(position);
if (tag == null)
return null;
return mFragmentManager.findFragmentByTag(tag);
}
}
答案 0 :(得分:1)
FragmentStatePagerAdapter
此方法用于添加将在tab时调用的侦听器 选择变化。
tabLayoutOBJ.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
public void onTabReselected(TabLayout.Tab tab) {
}
public void onTabSelected(TabLayout.Tab tab){
String getTAB = (String)tab.getText();
// Do your WORK
}
public void onTabUnselected(TabLayout.Tab tab){
}
});
答案 1 :(得分:0)
背后的原因是viewpager的实现。在ViewPager中有一个名为offset的属性,可以在其旁边生成准备好的片段,直到offset(int)值。
默认值为1.例如,您处于第1个位置,也会创建第0个和第2个位置。
另一方面,如果你处于第0位,则1st是唯一创建的片段。如果向右滑动(进入第1个),则将创建第2个。
我假设您正在从第一个片段更改共享对象,并希望通过更改的数据通知第二个片段。要解决它,您需要使用监听器。解决它的优雅方法是在共享对象中添加观察者模式。
祝你好运埃姆雷