【问题标题】:ViewPager in blank when I return back to the fragment当我返回片段时,ViewPager 为空白
【发布时间】:2013-08-08 12:02:46
【问题描述】:

我有一个片段 AroundMeFragment,它有一个带有两个片段 MapFragmentListFragment 的视图寻呼机。当我第一次进入这个片段时一切正常,但是当我单击一个项目进入新片段中的详细视图并返回到 AroundMeFragment 时,视图是空白的,没有项目被绘制。而且,如果我从这个片段中退出并进入另一个时间片段是空白的。

当我从细节片段返回到 AroundMeFragment 时,如何查看片段的内容?

ArouundMeFragment:

public ArroundMeFragment() {
}

public static Fragment newInstance(Bundle bundle) {
    ArroundMeFragment f = new ArroundMeFragment();
    f.setArguments(bundle);
    return f;
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.activity = activity;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    sectionShowed = MAP_VIEW_ARROUND_ME;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.arround_me_main_layout, container, false);

    mViewPager = (ViewPager) v.findViewById(R.id.viewPager);

    if (fragments == null) {
        fragments = new ArrayList<Fragment>();

        fragments.add(MapMainFragment.newInstance());

        Bundle bundle = new Bundle();
        bundle.putInt(ConstantsTypeSection.TYPE_VIEW_SECTION, ConstantsTypeSection.AROUND_ME_SECTION);
        fragments.add(DetailShapelessListViewFragment.newInstance(bundle));
    }

    mAdapter = new AroundMePagerAdapter(getFragmentManager(), fragments);
    mViewPager.setAdapter(mAdapter);



    // BTN CHANGE VIEW
    btn_change_view = (ImageButton) v.findViewById(R.id.btn_change_view);
    btn_change_view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            changeView();
        }
    });

    return v;
}

/**
 * Cambia una vista u otra
 */
private void changeView() {

    try {

        if (sectionShowed == LIST_VIEW_ARROUND_ME) {

            mViewPager.setCurrentItem(0);

            sectionShowed = MAP_VIEW_ARROUND_ME;

            btn_change_view.setImageResource(R.drawable.selector_btn_change_map_arroundme);

        } else if (sectionShowed == MAP_VIEW_ARROUND_ME) {

            mViewPager.setCurrentItem(1);

            sectionShowed = LIST_VIEW_ARROUND_ME;

            btn_change_view.setImageResource(R.drawable.selector_btn_change_list_arroundme);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}// End Method

private class AroundMePagerAdapter extends FragmentPagerAdapter {

    private ArrayList<Fragment> fragments;

    public AroundMePagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }
}

主要活动。只有一个活动支持应用程序中的所有片段。

 ....
 case ConstantsMenu.ARROUND_ME_SECTION:
     Fragment = ArroundMeFragment.newInstance(bundle);  
     break;
 ....

 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
 ft.replace(R.id.content_frame, mFragment);
 if (hasToAddToBackStack) {
      ft.addToBackStack(null);
 }
 ft.commit();

【问题讨论】:

    标签: android android-viewpager fragment


    【解决方案1】:
    mAdapter = new MyFragmentPagerAdapter(getChildFragmentManager());
    

    而不是

    mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
    

    Austyn Mahoney

    【讨论】:

      【解决方案2】:

      嵌套片段在版本 16 及更低版本中不兼容。现在,您可以动态地nest fragment

      我更改了我的代码,现在我不使用 viewpager 并添加像此代码这样的片段以将片段切换到另一个片段。

      getChildFragmentManager().beginTransaction().replace(R.id.container, list, "LIST").setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit();
      

      【讨论】:

      • 嵌套片段在 16 及更低版本中不兼容。 - 原生片段。但是,您可以使用基本相同的兼容性包中的片段。您的问题代码有一个问题,如果您打算使用嵌套片段,请使用getChildFragmentManager() 而不是getFragmentManager()
      • 您可以使用我在此处提供的适配器在没有 getChildFragmentManager() 的情况下实现此目的:stackoverflow.com/questions/7700226/…
      猜你喜欢
      • 1970-01-01
      • 2015-05-30
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多