使用片段时找不到 id 的视图
No view found for id when using Fragments
我已经尽我所能来解决我的问题,这与许多其他无法找到视图的 fragmentmanager 一样。
尝试了我在网上找到的所有可以考虑的东西。
这是我的 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.
打开了你的项目
错误在这里:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
....
fmTrans.add(R.id.fragmentContainerID, menuFragment);
....
}
您正在将片段添加到 fragmentContainerID
。但是,该视图未添加到 Activity
(导致未找到视图错误)。
因此,为了修复,我认为您只需将布局应用到主 activity。类似于:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add this after super.onCreate()
setContentView(R.layout.activity_main);
.....
}
编辑
正如我在其中一条评论中所说,我认为您不需要下面 MenuFragment.java 中的代码。我想你可以删除它。
MenuFragment menuFragment = new MenuFragment();
((MainActivity)getActivity()).addFragment(menuFragment, true, "Menu");
我已经尽我所能来解决我的问题,这与许多其他无法找到视图的 fragmentmanager 一样。
尝试了我在网上找到的所有可以考虑的东西。
这是我的 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.
打开了你的项目错误在这里:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
....
fmTrans.add(R.id.fragmentContainerID, menuFragment);
....
}
您正在将片段添加到 fragmentContainerID
。但是,该视图未添加到 Activity
(导致未找到视图错误)。
因此,为了修复,我认为您只需将布局应用到主 activity。类似于:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add this after super.onCreate()
setContentView(R.layout.activity_main);
.....
}
编辑
正如我在其中一条评论中所说,我认为您不需要下面 MenuFragment.java 中的代码。我想你可以删除它。
MenuFragment menuFragment = new MenuFragment();
((MainActivity)getActivity()).addFragment(menuFragment, true, "Menu");