how*_*ttl 96 android android-fragments android-viewpager android-nested-fragment
我有一个片段界面,底部有标签,可以在主视图中打开不同的片段.
我有一个特定的片段,它是一个项目列表.如果用户选择此列表中的一个项目,则打开另一个片段,其中包含一个viewpager,它在前一个片段的列表中的所有项目之间水平滚动.这非常有效.
viewpager使用FragmentPagerAdapter来显示项目.
当用户选择列表中的项目,查看它,然后点击标签栏上的按钮返回列表,然后选择另一个项目时,问题就出现了.第二次选择项目时,将显示空白屏幕而不是viewpager.发生这种情况时,我的LogCat中没有收到任何错误.
为什么viewpager只出现在第一次?
FragmentPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter {
Cursor mCursor;
public ViewPagerAdapter(FragmentManager fm, Cursor c) {
super(fm);
mCursor = c;
}
public void changeCursor(Cursor c) {
mCursor = c;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
if (mCursor == null) return 0;
else return mCursor.getCount();
}
@Override
public Fragment getItem(int position) {
mCursor.moveToPosition(position);
return TeamCardFragment.newInstance(mCursor, position);
}
}
Run Code Online (Sandbox Code Playgroud)
PagerFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = getArguments();
mCursorPosition = bundle.getInt(TeamCardCommon.BUNDLE_KEY_CURSOR_POSITION);
View mView = inflater.inflate(R.layout.team_card_master, container, false);
mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager);
mAdapter = new ViewPagerAdapter(getFragmentManager(), cursor);
new setAdapterTask().execute();
return mView;
}
private class setAdapterTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(mCursorPosition);
}
}
Run Code Online (Sandbox Code Playgroud)
Yan*_*ann 215
我遇到过同样的问题.更改我的PageAdapter的父类android.support.v4.app.FragmentPagerAdapter以android.support.v4.app.FragmentStatePagerAdapter解决ViewPager"第二次"的显示问题!
Dan*_*l F 85
我设法通过更换来解决这个getFragmentManager()与getChildFragmentManager()父片段.此父片段正在实例化android.support.v4.app.FragmentPagerAdapter以包含可分页(可滑动)片段,这需要构造函数中的片段管理器.对于这个构造函数,我传递了返回值getChildFragmentManager().
hackbod的链接很关键(https://developer.android.com/about/versions/android-4.2.html#NestedFragments),这篇文章在片段中发现片段
要嵌套片段,只需调用
getChildFragmentManager()要添加片段的片段即可.这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务.
j2e*_*nue 15
对我来说,我不得不在我的viewpager上调用它:
myViewPager.setSaveFromParentEnabled(false);
Run Code Online (Sandbox Code Playgroud)
我有一个问题,其中viewpager没有刷新,我所看到的只是一个空白的白色屏幕碎片应该是.我在getChildFragmentManager中传递但它没有帮助.
小智 10
在我的特殊情况下,我在使用带有AppBarLayout和ViewPager的CoordinatorLayout时,为我解决的是从我的AppBarLayout xml属性中删除android:fitsSystemWindows ="true".
不要问我为什么.我知道这听起来有点荒谬,并且它应该没有相关性,但是这一行是唯一导致麻烦的因为我已经在我的适配器中使用了getChildFragmentManager().我花了整整一天调试我的代码才发现这个,所以我希望它能节省一些时间.
我有同样的问题,我将适配器更改FragmentPagerAdapter为FragmentStatePagerAdapter和getFragmentManager()父片段中的getChildFragmentManager()
这背后的原因FragmentStatePagerAdapter是有助于存储大量页面,并且与访问的每个页面相关联的存储器较少,因为它在页面不可见时仅保留片段的保存状态.这减少了在片段之间切换时的开销.
| 归档时间: |
|
| 查看次数: |
35131 次 |
| 最近记录: |