1

我的应用程序有两个fragments,一个是列表,一个是详细视图,它们都以横向模式显示,只有列表以纵向显示。onCreateOptionsMenu在配置更改时,如果我在两者中放置一个断点fragments,它们将被击中两次,并且其中的菜单项Actionbar被复制。

我尝试设置invalidateOptionsMenu不同的事件,例如onResumeand onActivityCreated,但这似乎没有帮助。我不确定什么会导致onCreateOptionsMenu被击中两次。

我注意到这里有一个解决方案但这对我不起作用。它会java.lang.IllegalArgumentException No view found for for fragment导致onStart.Activity

更新

我正在使用 a在肖像模式下ViewPager加载:fragments

public class Main extends SherlockFragmentActivity
{
    private static List<Fragment> fragments;

    @Override
    public void onCreate(final Bundle icicle)
    {    
        setContentView(R.layout.main);
    }

    @Override
    public void onResume()
    { 
        mViewPager = (ViewPager)findViewById(R.id.viewpager);

               if (mViewPager != null)
               {

                  fragments = new ArrayList<Fragment>();

                  fragments.add(new MyListFragment());

                  fragments.add(MyDetailFragment.newInstance(0));
                  fragments.add(MyDetailFragment.newInstance(1));
                  fragments.add(MyDetailFragment.newInstance(2));

                  mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
                  mViewPager.setAdapter(mMyFragmentPagerAdapter);
               }
    }

    private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter  {  

        public MyFragmentPagerAdapter(FragmentManager fm) {  
             super(fm);  
        }  

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

        @Override
        public int getCount() {  
             return 4;  
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
   }
}

它是横向模式,我正在添加fragments通过 XML。这是文件layout-land夹中的 main.xml 文件:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:weightSum="3"
>
    <fragment android:name="com.app.ListingFragment"
            android:id="@+id/fragmentDetails"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
     />

    <fragment android:name="com.app.DetailFragment" 
            android:id="@+id/fragmentDetails"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_height="fill_parent"
     />

</LinearLayout>

这是layout文件夹中的 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
     />

 </RelativeLayout>
4

1 回答 1

2

问题是您在布局文件中添加片段,并通过调用构造函数/newInstance 方法手动实例化它们。

如果你在布局上添加一个片段,android 框架会为你实例化它。在您发布的代码中,您总共有 4 个详细信息片段和 2 个列表片段实例,即使您可能无法全部看到它们。

而不是手动实例化片段,您应该通过调用FragmentManager.getFragmentById来检索它的实例并改用该实例。

对于详细信息片段,我不会在布局上使用一个片段声明,而是将其替换为可用于添加寻呼机适配器的普通布局

于 2013-02-03T20:12:46.137 回答