动态添加来自不同来源的片段

Dynamically adding fragments from different sources

所以我有 MainActivity 它将作为一个容器来容纳两个片段; MainActivityFragmentActivity 的子 class。顶部片段是一个只有 Spinner 的片段,在 MainActivity:

中声明为内部 class
public static class NavigationFragment extends Fragment {

    public NavigationFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.navigation_fragment, container, false);
        Spinner spinner = (Spinner)rootView.findViewById(R.id.menuSpinner);

        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.menuArray, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener((MainActivity)getActivity());

        return rootView;
    }
}

加载MainActivity时,我成功获取了我的top片段:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.mainContainer, new NavigationFragment())
                .commit();

    }
}

底部片段是问题所在。在另一个文件中,我有 FragmentA 并没有真正做很多事情,但有一些 ui 元素来查看它是否工作;它是 Fragment 的子 class。当用户更改微调器的值时,FragmentA 将被删除并替换为 FragmentB。我正在尝试像这样添加初始片段:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.mainContainer, new NavigationFragment())
                .add(R.id.mainContainer, new FragmentA()) // THIS IS THE ONLY NEW LINE AND CAUSES THE ERROR
                .commit();

    }
}

我收到错误 can't resolved method add(int, com.mybundle.myapp.FragmentA)。我不明白为什么,因为添加 NavigationFragment 应该与添加 FragmentA 相同,因为它们都扩展了 Fragment

我的问题是,如何正确地动态添加然后替换不属于包含它们的主要 activity 内部 class 的片段?

我的另一个问题是,这是实现这种导航流程的正确方法吗?我已经使用 iOS 多年,所以就设计和导航模式而言,转向 Android 对我来说有点陌生。

检查你的定义文件并确保你对 FragmentTransaction 使用相同的导入,因为 FragmentTransaction API 附带支持版本也支持 android 设备 运行 3.0 及更早版本