- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序有两个 fragment
,一个是列表,一个是详细 View ,它们都以横向模式显示,只有列表以纵向显示。在配置更改时,如果我在两个 fragments
的 onCreateOptionsMenu
中放置一个断点,它们将被击中两次并且 Actionbar
中的菜单项正在被重复。
我尝试在不同的事件中设置 invalidateOptionsMenu
,例如 onResume
和 onActivityCreated
,但这似乎没有帮助。我不确定什么会导致 onCreateOptionsMenu
被点击两次。
我注意到有一个解决方案 here ,但这对我不起作用。它会在 Activity
的 onStart
中导致 java.lang.IllegalArgumentException No view found for fragment
。
更新
我正在使用 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;
}
}
}
它是横向模式,我通过 XML 添加 fragments
。这是 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>
最佳答案
问题是您在布局文件中添加 fragment ,并且还通过调用构造函数/newInstance 方法手动实例化它们。
如果你在布局上添加一个 fragment ,android框架会为你实例化它。在您发布的代码中,您总共有 4 个 Details fragment 和 2 个列表 fragment 实例,尽管您可能无法看到它们全部。
您应该通过调用 FragmentManager.getFragmentById 来检索它的实例,而不是手动实例化 fragment 。并改用该实例。
对于细节 fragment ,我不会在布局上有一个 fragment 声明,而是将其替换为可用于添加寻呼机适配器的普通布局
关于android - onCreateOptionsMenu 在配置更改时调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668521/
我是一名优秀的程序员,十分优秀!