相关疑难解决方法(0)

碎片中的碎片

我想知道这是否是Android API中的一个错误:

我有这样的设置:

?----?---------?
|    |         |
|  1 |    2    |
|    |?-------?|
|    ||       ||
|    ||   3   ||
?----??-------??
Run Code Online (Sandbox Code Playgroud)
  1. 是一个在右侧窗格中加载片段#2(搜索屏幕)的菜单.
  2. 是包含片段#3的搜索屏幕,片段#3是结果列表.
  3. 结果列表在几个地方使用(包括作为一个功能正常的高级片段).

此功能在手机上非常有效(其中1和2和3为ActivityFragments).

但是,当我使用此代码时:

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();       
    Fragment frag = new FragmentNumber2();
    if(toLoad != null) frag.setArguments(toLoad);
    transaction.replace(R.id.rightPane, frag);      
    transaction.commit();
Run Code Online (Sandbox Code Playgroud)

其中R.id.leftPaneR.id.rightPane<fragment>S IN水平线性布局.

据我所知,上面的代码删除了驻留的片段,然后用新的片段替换它.很棒......显然不会发生这种情况,因为当第二次运行此代码时会出现以下异常:

07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
Run Code Online (Sandbox Code Playgroud)

这是因为FragmentNumber3的容器已被复制,并且它不再具有唯一ID.在添加新的片段之前,初始片段没有被销毁(?)(在我看来,这意味着它还没有被 …

android android-fragments android-nested-fragment

145
推荐指数
4
解决办法
14万
查看次数

ViewPager中使用FragmentPagerAdapter的片段在第二次查看时为空白

我有一个片段界面,底部有标签,可以在主视图中打开不同的片段.

我有一个特定的片段,它是一个项目列表.如果用户选择此列表中的一个项目,则打开另一个片段,其中包含一个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); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-nested-fragment

96
推荐指数
6
解决办法
4万
查看次数