我正在使用 流行病答案中的信息在我的应用程序中创建标签
我创建了处理标签的主类,这个类extends TabActivity
并创建标签:
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, stackA.class);
spec = tabHost.newTabSpec("tab1").setIndicator("Tab 1",
res.getDrawable(android.R.drawable.ic_menu_search))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, stackB.class);
spec = tabHost.newTabSpec("tab2").setIndicator("Tab 2",
res.getDrawable(android.R.drawable.ic_menu_search))
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
然后为每个选项卡创建 FragmentActivity,这为在每个选项卡中创建堆栈提供了可能性。我的片段被创建:
protected void navigateTo(Fragment newFragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content, newFragment);
ft.addToBackStack(null);
ft.commit();
}
public class fragmentA extends Fragment{
private LinearLayout ll;
private FragmentActivity fa;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fa = super.getActivity();
ll = (LinearLayout) inflater.inflate(R.layout.fragmenta, container, false);
Button next = (Button) ll.findViewById(R.id.button1);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
((ActivityInTab) getActivity()).navigateTo(new fragmentB());
}
});
return ll;
}
}
这是有效的。当我在选项卡 1 和片段 B(堆栈中的第一个片段是 A)时,旋转我的设备,然后它返回片段 A,这有什么问题。
Epidemian 说了一些关于方向和使用 setArguments/getArguments 的内容,但我是 android 编程的新手,所以我真的不知道该怎么做:
最后,如果您需要在方向变化中幸存下来,请务必使用 setArguments/getArguments 创建您的片段。如果您在片段的构造函数中设置实例变量,您将被搞砸。但幸运的是,这很容易解决:只需将所有内容保存在构造函数的 setArguments 中,然后在 onCreate 中使用 getArguments 检索这些内容以使用它们。