Viewpager + FragmentStatePagerAdapter +片段不工作 [英] Viewpager + FragmentStatePagerAdapter + Fragment not working
问题描述
我有一些项FragmentList。如果我点击一个项目的相应片段将打开其中包含一个Viewpager。没问题,但迄今为止,如果我回到列表并单击该项目再次方法的getItem(INT位置)不再被调用。结果
这里有一个类似的问题链接:结果
<一href=\"http://stackoverflow.com/questions/7700226/display-fragment-viewpager-within-a-fragment\">Display片段中的片段viewpager 结果
I have a FragmentList with some items. If I click an item the appropriate Fragment will open which contains a Viewpager. No problem so far but if I go back to the List and click the item again the method getItem(int position) is not called anymore.
Here a link with a similar problem:
Display fragment viewpager within a fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.activity_fragment_runtime, container, false);
mViewPager = (ViewPager) view.findViewById(R.id.pager);
indicator = (TitlePageIndicator) view.findViewById(R.id.indicator);
MyFragmentPagerAdapter mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getActivity().getSupportFragmentManager());
mViewPager.setAdapter(mMyFragmentPagerAdapter);
indicator.setViewPager(mViewPager);
return view;
}
class MyFragmentPagerAdapter extends FragmentStatePagerAdapter implements TitleProvider {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public String getTitle(int position) {
return muxbusTitles[position];
}
@Override
public Fragment getItem(int location) {
return muxbusFragmentList.get(location);
}
@Override
public int getCount() {
return muxbusTitles.length;
}
}
return view;
}
编辑:
如果有人有兴趣,该解决方案是从PagerAdapter而不是FragmentStatePagerAdpater延伸,因为Viewpager已经是一个片段。
If someone is interested,the solution was to extends from PagerAdapter instead of FragmentStatePagerAdpater because the Viewpager is already in a Fragment..
推荐答案
我也有类似的问题,抓我的头很长一段时间我做了我的自己的理解(假设)后的 ViewPager
是保持它的子片段的参考到内存中,即使托管片段或活动
被销毁(不与活动测试)。所以我写了这个方法 freeFragmentsFromViewPager()
。你需要从的onDestroy称之为()
你的片段
。
I did have similar problem and after scratching my head for quite some time i made an my own understanding (assumption) that ViewPager
is keeping the reference of its child fragments into memory even the hosted Fragment or Activity
is destroyed (didn't tested with Activity). So i wrote this method freeFragmentsFromViewPager()
. You need to call it from onDestroy()
of your Fragment
.
/**
* This method free the child fragments from ViewPager as ViewPager keeps the reference
* of child fragments into memory and next time when you again come to visit view pager it won't show the fragment layout
* because it has the reference to the fragment whilst the fragment's view was already destroyed.
*/
private void freeFragmentsFromViewPager()
{
for(int i = 0; i < TabsFragmentPagerAdapter.fragments.length; i++)
{
Fragment fragment = TabsFragmentPagerAdapter.fragments[i];
if(fragment != null)
{
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
TabsFragmentPagerAdapter.fragments[i] = null;
}
}
}
这是我的适配器code
And this is my Adapter code
public class TabsFragmentPagerAdapter extends FragmentPagerAdapter
{
public static final int NUM_TABS = 3;
public static Fragment[] fragments = new Fragment[NUM_TABS];
public TabsFragmentPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position)
{
Log.e("TabsFragmentPagerAdapter", "getItem");
Fragment fragment = TabsFragmentFactory.newInstace(position);
fragments[position] = fragment;
return fragment;
}
@Override
public int getCount()
{
return NUM_TABS;
}
@Override
public CharSequence getPageTitle(int position)
{
return TabsFragmentFactory.getName(position);
}
这篇关于Viewpager + FragmentStatePagerAdapter +片段不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!