无法更新片段中的视图寻呼机

时间:2016-01-04 22:40:26

标签: android android-fragments android-viewpager

我有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了很多但还没有得到任何满意的答案。

3 个答案:

答案 0 :(得分:0)

当您想要更新视图时,是否调用了notifyDataSetChanged?

答案 1 :(得分:0)

默认情况下,getItemPosition()返回POSITION_UNCHANGED,这表示“此对象很好,不要销毁或删除它”。返回POSITION_NONE修复问题,而是说:“此对象不再是我正在显示的项目,将其删除。”因此它具有删除和重新创建适配器中每个项目的效果。

这是一个完全合法的修复!此修复使notifyDataSetChanged的行为类似于没有视图回收的常规适配器

  

如果你想切换出正在存在的实际片段   显示,你需要避免FragmentPagerAdapter并使用   FragmentStatePagerAdapter。

点击此链接update viewpager

答案 2 :(得分:0)

我已经通过使用覆盖方法解决了。

  @Override
    public Parcelable saveState() {
        return null;
    }