在运行时动态交换片段

时间:2014-07-05 20:53:59

标签: android android-fragments

您好我正在尝试实现侧抽屉,主要内容正由片段填充。 但是,当我交换这些片段并尝试将它们交换回两个片段叠加的内容时。

到目前为止,这是我的代码:

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,因此抽屉很容易扩展。

我做错了什么?

2 个答案:

答案 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(...)

的参数中