我的应用有两个fragments
,一个是列表,另一个是详细视图,它们都以横向模式显示,只有列表以portait显示。在配置更改时,如果我在两个onCreateOptionsMenu
的{{1}}中放置一个断点,它们将被击中两次,fragments
中的菜单项将被复制。
我尝试在不同的事件中设置Actionbar
,例如invalidateOptionsMenu
和onResume
,但这似乎没有帮助。我不确定是什么会导致onActivityCreated
被击中两次。
我注意到有一个解决方案here,但这对我不起作用。它会导致onCreateOptionsMenu
上的java.lang.IllegalArgumentException No view found for for fragment
onStart
。{/ p>
更新
我在使用Activity
时以正常模式加载ViewPager
:
fragments
和横向模式我通过XML添加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
文件夹中的main.xml文件:
layout-land
这是<?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>
文件夹中的XML:
layout
答案 0 :(得分:2)
问题是您是在布局文件中添加片段,还是通过调用构造函数/ newInstance方法手动实例化它们。
如果在布局上添加片段,android框架将为您实例化它。在您发布的代码中,您总共有4个Details片段和2个列表片段实例,即使您可能无法全部看到它们。
不是手动实例化片段,而是应该通过调用FragmentManager.getFragmentById来检索它的实例,而是使用该实例。
对于细节片段,我不会在布局上使用一个片段声明,而是将其替换为可用于添加寻呼机适配器的普通布局