我有2个片段(A和B)。我在主要活动中使用了User
并将这些片段用作两个不同的标签。我在片段A上实现了view pager。当我更新片段B时,我也尝试更新片段A.这意味着必须更新视图寻呼机。
但是当我将标签从B切换到A时更新B后,我无法在A中获得更新。重新启动应用程序后,我找到了更新。但我想立即更新。我知道片段与活动紧密结合。所以,我也尝试使用分离和附加主要活动的片段。
这是片段A的代码:
FragmentTabHost
切换选项卡时代码中的。我得到了日志@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.current_details, container, false);
init();
return mView;
}
private void init() {
session = new SessionManager(getActivity());
if (session.getCurrentId() < 1) {
count = 1;
} else {
count = AppController.getInstance().getProfile().size();
}
mFragmentAdapter = new FragmentAdapter(getChildFragmentManager());
mViewPager = (ViewPager) mView.findViewById(R.id.pager);
mViewPager.setAdapter(mFragmentAdapter);
mViewPager.setCurrentItem(session.getCurrentId());
Log.d("Status : ","called");
}
public static class FragmentAdapter extends FragmentStatePagerAdapter {
public FragmentAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
SpecificCurrentDetails fragment = new SpecificCurrentDetails();
Bundle bdl = new Bundle();
int id;
if (AppController.getInstance().getProfile() == null) {
id = 0;
} else {
id = AppController.getInstance().getProfile().get(arg0).getId();
}
Log.d("Status ID: ", id + "");
bdl.putInt("profile_id", id);
fragment.setArguments(bdl);
return fragment;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return count;
}
@Override
public void destroyItem(ViewGroup container, int position, Object
object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
但没有得到"Status : called"
。当我重新启动应用程序时,请调用"Status id: "
。
虽然我发现每次切换标签时都会调用"Status id : x"
,但我没有明白问题在哪里。我已经google了很多但还没有得到任何满意的答案。
答案 0 :(得分:0)
当您想要更新视图时,是否调用了notifyDataSetChanged?
答案 1 :(得分:0)
默认情况下,getItemPosition()返回POSITION_UNCHANGED,这表示“此对象很好,不要销毁或删除它”。返回POSITION_NONE修复问题,而是说:“此对象不再是我正在显示的项目,将其删除。”因此它具有删除和重新创建适配器中每个项目的效果。
这是一个完全合法的修复!此修复使notifyDataSetChanged的行为类似于没有视图回收的常规适配器
如果你想切换出正在存在的实际片段 显示,你需要避免FragmentPagerAdapter并使用 FragmentStatePagerAdapter。
点击此链接update viewpager
答案 2 :(得分:0)
我已经通过使用覆盖方法解决了。
@Override
public Parcelable saveState() {
return null;
}