【问题标题】:No view found for id when using Fragments使用 Fragments 时找不到 id 的视图
【发布时间】:2019-10-22 18:53:21
【问题描述】:

我已经尽我所能来解决我的问题,这与无法找到视图的片段管理器的许多其他人一样。

尝试了我在网上找到并能想到的一切。

这是我的 MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MenuFragment menuFragment = new MenuFragment();
        FragmentManager fmStart = getSupportFragmentManager();
        FragmentTransaction fmTrans = fmStart.beginTransaction();
        fmTrans.add(R.id.fragmentContainerID, menuFragment);
        fmTrans.commitAllowingStateLoss();


    }

    public void addFragment(Fragment fragment, boolean addToBackStack, String tag) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();

        if (addToBackStack) {
            ft.addToBackStack(tag);
        }
        ft.replace(R.id.fragmentContainerID, fragment, tag);
        ft.commitAllowingStateLoss();
    }
}

我得到的错误与许多其他错误相同:

java.lang.IllegalArgumentException: No view found for id 0x7f080073 (se.iteda.hangman:id/fragmentContainerID) for fragment MenuFragment{d8a58aa (60d879ee-e84c-425e-a1a1-8e9be9c3b3a8) id=0x7f080073}

我想要做的是在开始时加载一个片段(MenuFragment),在那个片段中,我有 2 个按钮可以更改片段。

【问题讨论】:

  • 整个项目可以在github.com/RiftApps/HangStickMan找到
  • 删除这个 "((MainActivity)getActivity()).addFragment(menuFragment, true, "Menu");"您正在片段本身内创建一个新片段。这是错误的。
  • 好的,我删除了它,但问题是在该片段甚至加载之前,所以仍然在应用程序启动时崩溃并出现相同的错误
  • 所以我猜崩溃不在片段中,而是在加载它的活动中。分享活动代码

标签: java android android-fragments fragmentmanager


【解决方案1】:

好的。我在 Github 上打开了你的项目。

错误在这里:

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    fmTrans.add(R.id.fragmentContainerID, menuFragment);
    ....
}

您正在将片段添加到fragmentContainerID。但是,该视图没有添加到Activity(导致未找到视图错误)。

所以,为了修复,我认为您只需要将布局应用于主要活动。比如:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add this after super.onCreate()
    setContentView(R.layout.activity_main);
    .....
}

编辑

正如我在我的一个 cmets 中所说,我认为您不需要 MenuFragment.java 中的以下代码。我想你可以删除它。

MenuFragment menuFragment = new MenuFragment();
((MainActivity)getActivity()).addFragment(menuFragment, true, "Menu");

【讨论】:

  • 非常感谢,我在 xml 中的片段中添加了名称并添加了 setcontentview 并且成功了!!
猜你喜欢
  • 1970-01-01
  • 2011-06-27
  • 2011-11-22
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
相关资源
最近更新 更多