gpt4 book ai didi

android - onCreateOptionsMenu 在配置更改时调用了两次

转载 作者:行者123 更新时间:2023-11-29 21:50:04 28 4
gpt4 key购买 nike

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

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

我注意到有一个解决方案 here ,但这对我不起作用。它会在 ActivityonStart 中导致 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com