您好我正在尝试实现侧抽屉,主要内容正由片段填充。 但是,当我交换这些片段并尝试将它们交换回两个片段叠加的内容时。
到目前为止,这是我的代码:
private void createDefaultFragment(){
getFragmentManager()
.beginTransaction()
.add(R.id.home_content, getFragment(0))
.commit();
}
private void swapFragment(int index){
getFragmentManager()
.beginTransaction()
.replace(R.id.home_content, getFragment(index))
.commit();
}
getFragment
返回用户请求的Fragment
对象。
private Fragment getFragment(int index)
{
String fragmentClassNames[] = getResources().getStringArray(R.array.home_drawer_fragments);
try {
Class<?>requestedClass = Class.forName(fragmentClassNames[index]);
Constructor<?> constructor = requestedClass.getConstructor();
return (Fragment)constructor.newInstance();
} catch (Exception e) {
return null;
}
}
类名在资源中保存为string-array
,因此抽屉很容易扩展。
我做错了什么?
答案 0 :(得分:0)
我认为你应该调用replace而不是add in createDefaultFragment。
答案 1 :(得分:0)
问题在于如何创建片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
inflater.inflate(R.layout.recent_searches_fragment, container);
setHasOptionsMenu(true);
return super.onCreateView(inflater, container, savedInstanceState);
}
错误 - 您必须返回inlater.inflate(...)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.recent_searches_fragment, container, false);
}
以防万一其他人有这个问题;)
(并且不要忘记将false
添加到inflate(...)
)