动态添加来自不同来源的片段
Dynamically adding fragments from different sources
所以我有 MainActivity
它将作为一个容器来容纳两个片段; MainActivity
是 FragmentActivity
的子 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 及更早版本
所以我有 MainActivity
它将作为一个容器来容纳两个片段; MainActivity
是 FragmentActivity
的子 class。顶部片段是一个只有 Spinner
的片段,在 MainActivity
:
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 及更早版本